Shell Scripting中的OR条件 - Unix

时间:2014-11-20 17:53:57

标签: 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已经不存在,则该变量将为null。

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

我试过了,

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

它没有用。请指教。

PS:我刚刚开始我的Unix职业生涯并纠正我如果在任何地方都错了。

2 个答案:

答案 0 :(得分:0)

有几点。

分配给变量时,请勿使用美元符号:

foo=xxx

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

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

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

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

或类似的东西。

答案 1 :(得分:0)

在我的问题中这是一个错字。我实际上已经宣布它为,

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` and so on. 

我试过它,

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

由于我今天必须发送我的脚本,我使用了传统方法,

ssh <server_1> "cat /etc/passswd|cut -f -d:|grep -e $IID -e $EID" > file1
ssh <server_2> "cat /etc/shadow|cut -f -d:|grep -e $IID -e $EID" > file2
ssh <server_3> "cat /etc/passwd|cut -f -d:|grep -ix $CID" > file3

if [ -s file1 -o -s file2 -o -s file3]; then
for i in `cat file1 file2 file3`
do
echo $i "already exists"
done
else

我现在从第一篇文章中了解到-s确保文件不为空,-z是确保字符串为空。