大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
一、shell编程中条件表达式的使用
if #条件
then
Command
else
Command
fi #别忘了这个结尾
如果if语句忘了结尾fi
test.sh: line 14: syntax error: unexpected end of fi
二、if 的三种条件表达式
1.命令执行成功,等于返回0(比如grep ,找到匹配);执行失败,返回非0(grep,没找到匹配)
if
command
then
if
函数
then
2.表达式结果为真,则返回0,if把0值引向then
if [ expression_r_r_r ] #方括号前后要有空格
then
3. 表达式结果为假,则返回非0,if把非0值引向then
if test expression_r_r_r
then
三、[ ]&& ——快捷if
[ -f”/etc/shadow” ] && echo “This computer uses shadowpasswors”
&& 可以理解为then,如果左边的表达式为真则执行右边的语句。
四、shell的if与c语言if的功能上的区别
shell if:0为真,接着走then。不支持整数变量直接if [ i ],必须是if [ i –ne 0 ];但支持字符串变量直接if,如if [ str ],如果字符串非0则走then。
c语言if:正好相反,非0走then。支持变量直接if ( i )。
五、以多条command或者函数作为if条件
echo –n “input:”
read user
if #多条指令,这些命令之间相当于“and”(与)
grep $user /etc/passwd >/tmp/null
who -u | grep $user
then #上边的指令都执行成功,返回值$?为0,0为真,运行then
echo “$user has logged”
else #指令执行失败,$?为1,运行else
echo “$user has not logged”
fi
# sh test.sh
input : macg
macg pts/0 May1515:55 . 2075(192.168.1.100)
macg has logged
# sh test.sh
input : ddd
ddd has not logged
六、以函数作为if条件 (函数就相当于command,函数的优点是其return值可以自定义)
if #以函数作为if条件
getyn
then #函数reture值0为真,走then
echo ” your answer is yes”
else #函数return值非0为假,走else
echo “your anser is no”
fi
七、ifcommand 等价于command+if $?
例1:
$ vi testsh.sh
#!/bin/sh
if
cat 111-tmp.txt | grep ting1
then
echo “found”
else
echo “no found”
fi
$ sh testsh.sh
no found
$ vi 111-tmp.txt
that is 222file
thisting1 is 111file
$ sh testsh.sh
thisting1 is 111file
found
例2:
$ vi testsh.sh
#!/bin/sh
cat 111-tmp.txt | grep ting1
if [ $? -eq 0 ]
then
echo $?
echo “found”
else
echo $?
echo “no found”
fi
$ sh testsh.sh
1
no found
$ vi 111-tmp.txt
that is 222file
thisting1 is 111file
$ sh testsh.sh
thisting1 is 111file
0
found
八、 条件表达式
1.文件表达式
if [ -f file] 如果文件存在
if [ -d … ] 如果目录存在
if [ -s file ] 如果文件存在且非空
if [ -r file ] 如果文件存在且可读
if [ -w file ] 如果文件存在且可写
if [ -x file ] 如果文件存在且可执行
2.整数变量表达式
if [ int1 -eq int2] 如果int1等于int2
if [ int1 -ne int2 ] 如果不等于
if [ int1 -ge int2 ] 如果>=
if [ int1 -gt int2 ] 如果>
if [ int1 -le int2 ] 如果<=
if [ int1 -lt int2 ] 如果<
3.字符串变量表达式
if [ $a = $b] 如果a等于b,字符串允许使用赋值号做等号
if [ $a != $b ] 如果a不等于b
if [ -n $a ] 如果a非空(非0),返回0(true)
if [ -z $a ] 如果a为空
if [ $a] 如果a非空,返回0(和-n类似)
4.-eq -ne -lt -nt只能用于整数,不适用于字符串,字符串等于用赋值号=。同时由于shell里没有> 和< ,会被当作尖括号,整数条件表达式只有-ge, -gt,-le, lt。
5.=放在别的地方是赋值,放在if [ ]里就是字符串等于,shell里面没有==的,那是c语言的等于。
6.= 作为等于时,其两边都必须加空格,否则失效!!!等号也是操作符,必须和其他变量,关键字,用空格格开(等号做赋值号时正好相反,两边不能有空格!!!)
例:
$ vi test.sh
echo “input your choice:”
read var
if [ $var=”yes” ]
then
echo$var
echo”input is correct”
else
echo$var
echo “input error”
fi
$ sh test.sh
input your choice:
yes
yes
input is correct
$ sh test.sh
input your choice:
n
n
input is correct
输错了也走then,都走then,为什么?
因为if把$var=”yes”连读成一个变量,而此变量为空,返回1,则走else。
7.if [ $ANS ]等价于if [-n $ANS ]。如果字符串变量非空(then),空(else)。
九、逻辑表达式
1.逻辑非! 条件表达式的相反
if [ ! 表达式 ]
if [ ! -d $num] 如果不存在目录$num
2.逻辑与–a 条件表达式的并列
if [ 表达式1 –a 表达式2 ]
3.逻辑或-o 条件表达式的或
if [ 表达式1 –o表达式2 ]
4.逻辑表达式补充说明
· 表达式与前面的= != -d –f –x -ne -eq -lt等合用
· 逻辑符号就正常的接其他表达式,没有任何括号( ),就是并列
if [ -z “$JHHOME” -a -d $HOME/$num ]
· 注意逻辑与-a与逻辑或-o很容易和其他字符串或文件的运算符号搞混了
十、以 test 条件表达式 作为if条件
if test $num -eq 0 等价于 if[ $num –eq 0 ]
test 表达式,没有[ ]
if test $num -eq0
then
echo “try again”
else
echo “good”
fi
$ man test
[(1) UserCommands [(1)
SYNOPSIS
test EXPRESSION
[ EXPRESSION ]
[-n] STRING
thelength of STRING isnonzero -n和直接$str都是非0条件
-z STRING
thelength of STRING is zero
STRING1 = STRING2
thestrings are equal
STRING1 != STRING2
thestrings are not equal
INTEGER1 -eq INTEGER2
INTEGER1is equal to INTEGER2
INTEGER1 -ge INTEGER2
INTEGER1is greater than or equal to INTEGER2
INTEGER1 -gt INTEGER2
INTEGER1is greater than INTEGER2
INTEGER1 -le INTEGER2
INTEGER1is less than or equal to INTEGER2
INTEGER1 -lt INTEGER2
INTEGER1is less than INTEGER2
INTEGER1 -ne INTEGER2
INTEGER1is not equal to INTEGER2
FILE1 -nt FILE2
FILE1is newer (modification date) than FILE2
FILE1 -ot FILE2
FILE1is older than FILE2
-b FILE
FILEexists and is block special
-c FILE
FILEexists and is character special
-d FILE
FILEexists and is a directory
-e FILE
FILEexists 文件存在
-f FILE
FILEexists and is a regular file 文件存在且是普通文件
-h FILE
FILEexists and is a symbolic link (same as -L)
-L FILE
FILEexists and is a symbolic link (same as -h)
-G FILE
FILEexists and is owned by the effective group ID
-O FILE
FILEexists and is owned by the effective user ID
-p FILE
FILEexists and is a named pipe
-s FILE
FILEexists and has a size greater than zero
-S FILE
FILEexists and is a socket
-w FILE
FILEexists and is writable
-x FILE
FILE exists and is executable
十一、if简化语句
最常用的简化if语句
1. &&如果是“前面”,则“后面”
[ -f /var/run/dhcpd.pid ] && rm/var/run/dhcpd.pid 检查文件是否存在,如果存在就删掉
2. || 如果不是“前面”,则”后面”
[ -f /usr/sbin/dhcpd ] || exit 0 检验文件是否存在,如果存在就退出
3. 用简化 if 和$1,$2,$3来检测参数,不合理就调用help
[ -z “$1” ] &&help 如果第一个参数不存在(-z 字符串长度为0 )
[ “$1” = “-h” ] &&help 如果第一个参数是-h,就显示help
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170864.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...