我正在尝试完成一项任务,在该任务中,我必须编写命令行以显示cat / etc / passwd命令的输出并进行大量过滤 我尝试了以下
#!/bin/sh
cat /etc/passwd | grep -v '\#' | sed '1!n;d' | cut -d':' -f1 | rev | sort -r | awk 'NR>= ENVIRON["FT_LINE1"] && NR<= ENVIRON["FT_LINE2"]' | paste -s -d"," - | sed 's/,/, /g' | sed 's/$/./' | tr -d '\n'
但是执行它时没有给出任何结果(我只是执行./name.sh) 非常感谢您的帮助。
答案 0 :(得分:1)
从我们添加的注释来看,您似乎只是缺少将环境变量设置为某个值才能使代码工作的情况。像这样修改脚本:
#!/bin/sh
#
# Modify these values as required
export FT_LINE1=3
export FT_LINE2=8
cat /etc/passwd | \
grep -v '\#' | \
sed '1!n;d' | \
cut -d':' -f1 | \
rev | \
sort -r | \
awk 'NR>= ENVIRON["FT_LINE1"] && NR<= ENVIRON["FT_LINE2"]' | \
paste -s -d"," - | \
sed 's/,/, /g' | \
sed 's/$/./' | \
tr -d '\n'
\
将在下一行继续执行命令。我发现以这种方式更容易阅读和调试。
FT_LINE1和FT_LINE2的值可以从参数中读取,也可以在脚本外部的shell环境中设置。