有人可以帮忙解决这个问题,因为我似乎无法找到解决方案。我有以下脚本可以正常工作:
#!/bin/bash
#Checks the number of lines in the userdomains file
NUM=`awk 'END {print NR}' /etc/userdomains.hristian`;
echo $NUM
#Prints out a particular line from the file (should work with $NUM eventually)
USER=`sed -n 4p /etc/userdomains.hristian`
echo $USER
#Edits the output so that only the username is left
USER2=`echo $USER | awk '{print $NF}'`
echo $USER2
但是,当我用变量$ NUM替换第12行的4时,就像这样,它不起作用:
USER=`sed -n $NUMp /etc/userdomains.hristian`
我尝试了许多不同的引号组合和$ {},但是它们似乎都没有用,因为我是一个BASH新手。请帮助:)
答案 0 :(得分:2)
我不确定你已经尝试了什么,但这对我有用:
$ cat out
line 1
line 2
line 3
line 4
line 5
$ num=4
$ a=`sed -n ${num}p out`
$ echo "$a"
line 4
要明确的是,这里的问题是您需要将$num
的扩展与sed命令中的p
分开。那是花括号的作用。
请注意,我使用的是小写变量名。应该保留大写的shell以供shell使用。我还建议使用更现代的$()
语法进行命令替换:
a=$(sed -n "${num}p" out)
围绕sed命令的双引号是不必要的,但它们不会造成任何伤害。一般来说,在扩展中使用它们是一个好主意。
据推测,你问题中的剧本是一个学习练习,这就是你分别完成所有步骤的原因。为了记录,你可以像这样一次完成整个过程:
awk 'END { print $NF }' /etc/userdomains.hristian
在END
块中,仍然可以访问文件中最后一行的值,因此您可以直接打印最后一个字段。
答案 1 :(得分:1)
您尝试评估变量$NUMp
而不是$NUM
。试试这个:
USER=`sed -n ${NUM}p /etc/userdomains.hristian`