linux - Shell 脚本中的 OR 条件 - Unix

标签 linux shell unix

我声明了三个变量。

$1=`ssh <server_1> cat /etc/passswd|cut -f -d:|grep -e $IID -e $EID`
$2=`ssh <server_2> cat /etc/shadow|cut -f -d:|grep -e $IID -e $EID`
$3=`ssh <server_3> cat /etc/passwd}|cut -f -d:|grep -i $CID`

以上三个变量是通过 ssh 连接到服务器并检查我作为输入提供的 ID 是否存在而创建的。如果 ID 尚不存在,则变量将为空。

现在,我如何验证这三个变量是否都为空。我想使用 IF 中指定的 OR 条件。

我试过了,

if [ -s "$1" -o  -s "$2" -o  -s "$3"];then
echo -$1 $2 $3 "already exist(s)"

没用。请指教。

PS:我刚刚开始我的 Unix 职业生涯,如果有任何错误请纠正我。

最佳答案

几点。

当您分配给变量时,不要使用美元符号:

foo=xxx

变量 $1$2 等已用于命令行参数。选择其他名称。但请不要$4。 :-)

当您为 ssh 指定一个命令,并且它有参数时,必须用引号引起来,因为该命令需要是 ssh 的单个参数。在您的情况下,请使用双引号,因为您需要 $IID 等进行变量扩展。

大多数 Unix 实用程序都能够自行打开输入文件,因此您无需使用 cat 启动管道。

foo=`ssh <server_1> "cut -f -d: /etc/passwd | grep -e $IID -e $EID"`

或者类似的东西。

关于linux - Shell 脚本中的 OR 条件 - Unix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27046297/

相关文章:

c - Makefile 产生错误 "No rule to make target"

bash - 检查未传递的参数时出现意外标记 `fi' 附近的语法错误

bash - 根据模式连接和删除行

shell - 如何使用shell脚本一次运行多个jar文件?

perl - 是否可以使 'exec' 在 Perl 中使用 '$SHELL -c' 而不是 '/bin/sh -c'?

linux - 导出在我的 shell 脚本中不起作用

c - 向linux char设备驱动程序写入long?

linux - 为什么 exec 命令在 TCL 上不起作用?

unix - GNU 找到 : Search in current directory first

shell - 删除第一列,然后在 awk 中保留剩余的行不变