Linux Shell——退出、测试、判断及操作符

2022-12-20 611℃

退出状态

Linux系统中,每当命令执行完成后,系统都会返回一个退出状态,该退出状态用一整数表示,状态值为0,表示命令运行成功,不为0时表示运行失败。最后一次执行命令的退出状态被曝存在内置变量"$?"中,可以通过echo语句测试命令是否运行成功。

退出状态以及含义
状态值 含义
0 表示运行成功
1~125 运行失败,脚本命令、系统命令错误或者参数传递错误
126 找到该命令但无法执行
127 未找到要运行的命令
>128 命令被系统强制结束
 ls
111.csv  anaconda-ks.cfg  home
echo $?
0
  • 1
  • 2
  • 3
  • 4
# 访问的目录不存在
ll tt
ls: 无法访问tt: 没有那个文件或目录
echo $?
2

#执行的命令不存在
fkjng
-bash: fkjng: 未找到命令
[root@localhost ~]# echo $?
127

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

测试

测试结构

测试命令用于测试表达式的条件的真假,如果测试条件为真则返回0,如果测试条件为假,返回非0,。

两种格式:

test expression

[ expression ]

整数比较运算符

test测试数值时有一整套比较运算符,格式:

test "num1" numeric_operator "num2"或者[ "num1" numeric_operator "num2" ]

整数比较运算符 描述
-eq 等于
-ge 大于等于
-gt 大于
-le 小于等于
-lt 小于
-ne 不等于
[root@localhost ~]# num1=15
[root@localhost ~]# [ "$num1" -eq 15 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ "$num1" -eq 20 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ "$num1" -gt 15 ]
[root@localhost ~]# echo $?
1

#运算符点数  需要特定的函数
[root@localhost ~]# [ 1.5 -lt 2.2 ]
-bash: [: 1.5: 期待整数表达式

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

字符串运算符

字符串运算符 描述
string 测试是否不为空
-n string 是否不为空
-z string 是否为空
string1=string2 两个字符串是否相等
string1!=string2 是否不相等
[root@localhost ~]# str1=""
[root@localhost ~]# test "$str1"
[root@localhost ~]# echo $?   # 该字符串为空
1
[root@localhost ~]# test -n "$str1"
[root@localhost ~]# echo $?	  # 该字符串为空
1
[root@localhost ~]# test -z "$str1"
[root@localhost ~]# echo $?   # 该字符串为空
0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

文件操作符

格式:
test file_operator File或者[ file_operator file ]

文件运算符 描述
-d 是否为目录
-e 是否存在
-f 是否为普通文件
-r 是否是进程可读文件
-s 文件长度是都不为0
-w 是否是进程可写文件
-x 是否是进程可执行文件
-L 是否符号化链接
[ -d dialer-service.conf ]
[root@localhost demo]# echo $?
1
[root@localhost demo]# [ -d test ]
[root@localhost demo]# echo $?
0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

逻辑运算符

逻辑运算符 描述
!expression 表达式真假
-a 相当于与
-o 相当于或

判断

简单if结构

if expression
then
	command
	command
fi	
  • 1
  • 2
  • 3
  • 4
  • 5

exit命令

exit status

if/else结构

if expression
then
	command
else
	command
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

if/else 语句嵌套

if expression1
then
	if expression2
	then
		command
	else
		command
	fi
else
	if expression3
	then
		command
		command
	else
		command
	fi
fi						
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

if/elif/else结构

if expression1
then
	command
elif expression2
then
	command
elif expression3
then
	command
else
	command
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

case结构

case variable in
value1)
	command
	...
	command;;
value2)
	command
	...
	command;;
valueN)
	command
	...
	command;;
esac			
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

运算符

和编译语言一样

数字常量

#!/bin/bash

# 默认十进制
let "num1=40"
echo "num1=$num1"

#八进制表示
let "num2=040"
echo "num2=$num2"

#十六进制表示
let "num3=0x40"
echo "num3=$num3"

[root@localhost demo]# ./constant_exam1.sh 
num1=40
num2=32
num3=64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

还可以用num#来表示不同进制

标签: LINUX shell

非特殊说明,本博所有文章均为博主原创。