如何在bash中将变量传递到命令

时间:2018-10-14 22:08:22

标签: bash

我是bash脚本的新手,我正尝试将csv文件的while读取循环中的变量传递到命令中,如下所示,但是变量似乎未正确传递。

我知道该命令是正确的,因为我已使用硬编码值对其进行了测试。

有人可以告诉我如何正确地将f1 f3等传递到{命令}吗?

while read f1 f3 f5
do
        #filename = $bootydir+"/"+$f1
        #echo $filename
        { timeout 20 airodump-ng -a -w bob --bssid $f1 --channel $f3 --output-format cap --write-interval 1  wlan0mon; } &
        PID=$!
        echo "xterm"
        xterm -e "aireplay-ng --deauth 20 -a $f1 wlan0mon;"

        sleep 20
        #kill scan
        kill -TERM $PID

done < $bootydir/sorted.csv

2 个答案:

答案 0 :(得分:0)

  1. while read f1 f3 f5无法读取CSV文件。您将需要while IFS=, read f1 f3 f5或(更好的一种)具有实际CSV解析库的编程语言。
  2. 要避免在while循环中误吞标准输入,应使用while read -u 3 … done 3< …
  3. 您不需要分组-{ timeout 20 …; } &可以简单地是timeout 20 … &
  4. Use More Quotes™
  5. 您为什么timeout 20 在20秒后杀死? timeout 20已在20秒后发送SIGTERM。

答案 1 :(得分:0)

问题是f1 f3 f5无效。我只有4列f1 f2 f3 f4 因此f5弄乱了所有订单并给了我错误的值。我打电话给声明时发现了这一点,并注意到错误的值。