0

我在这里搜索并搜索了答案,我认为作为 bash 的菜鸟,不知道正确的方法,以及不搜索正确的关键字的组合意味着我无法完全克服最后的障碍。

我正在寻找编写一个脚本,对我们的 Netapp 系统进行一些检查。而且我在完成前 2 个变量(VAR1 和 VAR2)时遇到了一些困难……我尝试了 cut 和 awk 命令,但我所有的尝试都没有成功。

我有一个文本文件(LUNS),它看起来像:

     #SAN1; SAN2
    abc1:abc1N
    abc2:abc2N 
    a3:a3N 
    abcde4:abcde4N

所有的行都是文本和数字的东西。

对于 tom 文件的每一行,我想做:

  • 获取 VAR1 中第一列的值
  • 获取第 2 列 un VAR2 的值
  • 运行并为带有 VAR1 的命令获取新值 VAR3(它将是 LUN 的大小,因此它将是一个数值)
  • 运行并为带有 VAR2 的命令获取新值 VAR4(如下所示)
  • 比较 VAR3 和 VAR4 的数值

我做了什么 :

    cat tom |grep -v "#" |while read ligne ; do 
    VAR1=awk -F ";" '{print $1}'
    VAR2=awk -F ";" '{print $1}'
    specific command to get the numeric VAR3 & VAR4 values.
    #and run the comparaison  like : 
    if [ "$VAR3" -ne "$VAR4" ] 
    then
    echo "PROBLEM"
            if [ "$VAR4" -lt "$VAR3" ] ; then echo $VAR4; rm $VAR4; else echo "call support"; fi
    else 
    echo "Everything is OK"
    fi  

我的 awk 不工作。我对配置文件中的任何修改或以我的方式获取 VAR1 和 VAR2 变量持开放态度

请给我你的意见好吗?

4

3 回答 3

0

无需使用 awk

可以像这样重写循环

#!/bin/bash

while read line;do
    [[ "$line" =~ ^#.*$ ]] && continue
    VAR1=${line%:*}
    VAR2=${line#*:}
    echo $VAR1
    echo $VAR2
done < test
于 2014-10-13T08:50:35.993 回答
0

你应该使用

命令替代,$(some command) 例如a=$(ls)

或者

报价机制

所以为了awk工作使用

VAR1=$(awk -F ";" '{print $1}')
VAR2=$(awk -F ";" '{print $1}')

或者

VAR1=`awk -F ";" '{print $1}'`
VAR2=`awk -F ";" '{print $1}'`
于 2014-10-12T19:51:36.650 回答
0

一方面,你需要做

VAR1=$(echo $ligne|awk -F ";" '{print $1}')
VAR2=$(echo $ligne|awk -F ";" '{print $2}')
于 2014-10-12T19:51:43.047 回答