首页 > 解决方案 > 为什么当我在命令中使用变量时它会停止工作?|| 外壳脚本

问题描述

早上好,我是脚本世界的新手,我有这个问题,我不知道为什么会发生在我身上,为什么我错了,在此先感谢。

例如,我有这个命令可以搜索字母少 X 的用户:

cut -d: -f1 /etc/passwd | awk 'length($1) <= 4'

它可以正常工作,但是当我用 4 替换具有相同值的变量时,效果不佳:

number=4
echo -e $(cut -d: -f1 /etc/passwd | awk 'length($1) <= $number')

当我搜索具有旧密码的用户时,同样的错误也发生在我身上

awk -F: '{if($3<=18388)print$1}' < /etc/shadow

有效,但是当我使用变量时它停止工作

variable=18388
awk -F: '{if($3<=$variable)print$1}' < /etc/shadow

标签: linuxbashshellcommand-linescripting

解决方案


考虑使用awk's通过-v选项导入变量的能力,例如:

number=4
cut -d: -f1 /etc/passwd | awk -v num="${number}" 'length($1) <= num'

虽然如果第一个字段/etc/passwd包含空格,并且您想考虑整个字段的长度,您应该替换$1$0,例如:

number=4
cut -d: -f1 /etc/passwd | awk -v num="${number}" 'length($0) <= num'

更好的是,通过将输入字段分隔符指定为冒号,消除cut和子进程(由于管道)并用于整个操作:awk

number=4
awk -F':' -v num="${number}" 'length($1) <= num { print $1 }' /etc/passwd

推荐阅读