在尝试在while循环中唤醒READ输入时遇到问题。
这是我的代码:
#!/bin/bash
read -p "Please enter the Array LUN ID (ALU) you wish to query, separated by a comma (e.g. 2036,2037,2045): " ARRAY_LUNS
LUN_NUMBER=`echo $ARRAY_LUNS | awk -F "," '{ for (i=1; i<NF; i++) printf $i"\n" ; print $NF }' | wc -w`
echo "you entered $LUN_NUMBER LUN's"
s=0
while [ $s -lt $LUN_NUMBER ];
do
s=$[$s+1]
LUN_ID=`echo $ARRAY_LUNS | awk -F, '{print $'$s'}' | awk -v n1="$s" 'NR==n1'`
echo "NR $s :"
echo "awk -v n1="$s" 'NR==n1'$LUN_ID"
done
无论我尝试使用awk的哪些选项,我都不会让它显示比逗号之前的第一个条目更多。它在我看来,就像循环有一些问题,以使变量s向上计数。但另一方面,代码行:
LUN_ID=`echo $ARRAY_LUNS | awk -F, '{print $'$s'}' | awk -v n1="$s" 'NR==n1'`
效果很好!关于如何解决这个问题的任何想法。我的READ输入的另一个解决方案也很好。
答案 0 :(得分:0)
#!/bin/bash
typeset -a ARRAY_LUNS
IFS=, read -a -p "Please enter the Array LUN ID (ALU) you wish to query, separated by a comma (e.g. 2036,2037,2045): " ARRAY_LUNS
LUN_NUMBER="${#ARRAY_LUNS[@]}"
echo "you entered $LUN_NUMBER LUNs"
for((s=0;s<LUN_NUMBER;s++))
do
echo "LUN id $s: ${ARRAY_LUNS[s]}"
done
awk
代码不起作用?问题不在于反击。我说The last awk command in the pipe
即
awk -v n1="$s" 'NR==n1'
。
此awk
代码尝试在s
为1时打印第一行,在s
为2时打印第二行,在s
为3时打印第三行,以及依旧......但 echo $ARRAY_LUNS
打印了多少行?只需 ONE ...没有第二行,没有第三行......只有 一行 而且只是 打印一行 。
该行包含 ONE LINE 中的所有LUN_IDs
,即另一个LUN_ID旁边的一个LUN_ID,如下所示:
34 45 21 223
不 这样
34
45
21
223
这些LUN_IDs
字段 可由awk
使用$1
,$2
,$3
打印,......等等
因此,如果您希望代码运行正常 删除管道中的最后一个命令 :
LUN_ID=$(echo "$ARRAY_LUNS" | awk -F, '{print $'$s'}')
对于任何进一步的问题,请先阅读此awk guide