繁体   English   中英

Shell脚本中的OR条件-Unix

[英]OR condition in Shell Scripting - 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上的职业,如果在任何地方出错,我都可以纠正我。

几点。

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

foo=xxx

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

为ssh指定命令时,如果该命令具有参数,则必须将其引起引用,因为该命令必须是ssh的单个参数。 在您的情况下,请使用双引号,因为您需要$IID等的变量扩展。

大多数Unix utils都可以自己打开输入文件,因此您不需要使用cat启动管道。

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

或类似的东西。

这是我的错字。 我实际上已经宣布为

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确保字符串为空。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM