簡體   English   中英

bash-解析文件並獲取變量

[英]bash - parsing file and getting variables

我在這里搜索並尋找答案,我認為成為bash的菜鳥,不知道這樣做的正確方法以及不搜索正確的關鍵字的組合,意味着我無法完全克服最后的障礙。

我希望編寫一個腳本來對我們的Netapp系統進行一些檢查。 而且我在實現兩個第一個變量(VAR1和VAR2)方面遇到一些困難...我嘗試使用cut和awk命令,但所有嘗試均未成功。

我有一個文本文件(LUNS),看起來像:

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

所有行都是文本和數字的東西。

對於tom文件的每一行,我想這樣做:

  • 獲取VAR1中第一列的值
  • 獲取第二列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變量

可以請您提出意見嗎?

您應該使用

命令替換$(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}'`

一方面,您需要做

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

無需使用awk

可以像這樣重寫循環

#!/bin/bash

while read line;do
    [[ "$line" =~ ^#.*$ ]] && continue
    VAR1=${line%:*}
    VAR2=${line#*:}
    echo $VAR1
    echo $VAR2
done < test

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM