我声明了三个变量。
$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职业生涯并纠正我如果在任何地方都错了。
答案 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是确保字符串为空。