Shell 编程

Shell 编程

Bash 功能性语句

read

read 从标准输入读入一行, 并赋值给后面的变量, 其语法为:

read var
把读入的数据全部赋给 var
read var1 var2 var3
把读入行中的第一个参数赋给 var1, 第二个参数赋给 var2, ……,把其余所有的参数赋给最后一个变量.
如果执行 read 语句时标准输入无数据, 则程序在此停留等侯, 直到数据的到来或被终止运行.

1
2
3
4
$ read  name   age
[stdin] yilan 23
$ echo "student $name is $age years old"
[stdout] student yilan is 23 years

expr

算术运算命令 expr 主要用于进行简单的整数运算,包括加(+)、减(-)、乘(*)、整除(/)和求模(%)等操作

1
2
3
4
5
6
$ expr  12  +  5  \*  3 # 反斜线去掉*号的元字符含义

$ expr 25 % 4

sum=`expr $num \* 6 ` # 反撇号引用命令的运行结果
echo $sum

tput

tput —— terminal put 的简写,功能较多,主要用于设置终端工作模式, 或读出终端控制字符。 tput 命令与终端控制代码数据库 terminfo 相连, 根据 shell 环境变量 TERM 的值, 读出这种终端的指定功能控制代码。

1
tput  clear

Bash 语法

常用系统变量

1
2
3
4
5
6
7
8
$0           当前shell程序的名字
$1 ~ $9 命令行上的第一到第九个参数
$# 命令行上的参数个数,不包含$0
$* 命令行上的所有参数
$@ 分别用双引号引用命令行上的所有参数
$$ 当前进程的进程标识号(PID)
$? 上一条命令的退出状态
$! 最后一个后台进程的进程标识号

条件判断

if、else 和 elif 的基本语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# if 基本语法
if [ condition ]; then
# 如果条件为真,执行这里的代码
fi

# if-else 基本语法
if [ condition ]; then
# 如果条件为真,执行这里的代码
else
# 如果条件为假,执行这里的代码
fi

# if-elif-else 基本语法
if [ condition1 ]; then
# 如果 condition1 为真,执行这里的代码
elif [ condition2 ]; then
# 如果 condition1 为假,但 condition2 为真,执行这里的代码
else
# 如果 condition1 和 condition2 都为假,执行这里的代码
fi

Bash 中的条件判断可以使用一系列的测试命令和运算符。以下是一些常用的条件判断方法:

字符串测试

1
2
3
4
-z STRING:如果字符串为空,则为真。
-n STRING:如果字符串不为空,则为真。
STRING1 = STRING2:如果两个字符串相等,则为真。
STRING1 != STRING2:如果两个字符串不相等,则为真。

数值比较

1
2
3
4
5
6
7
NUM1 -eq NUM2:如果两个数字相等,则为真。
NUM1 -ne NUM2:如果两个数字不相等,则为真。
NUM1 -gt NUM2:如果 NUM1 大于 NUM2,则为真。
NUM1 -ge NUM2:如果 NUM1 大于或等于 NUM2,则为真。
NUM1 -lt NUM2:如果 NUM1 小于 NUM2,则为真。
NUM1 -le NUM2:如果 NUM1 小于或等于 NUM2,则为真。
[[$string =~ regex]]:如果字符串匹配正则表达式,则为真。

文件测试

1
2
3
4
5
6
-e FILE # 如果文件存在,则为真。
-f FILE # 如果文件存在且是普通文件,则为真。
-d FILE # 如果文件存在且是目录,则为真。
-r FILE # 如果文件存在且可读,则为真。
-w FILE # 如果文件存在且可写,则为真。
-x FILE # 如果文件存在且可执行,则为真。

逻辑运算符

1
2
&& # 逻辑与
|| # 逻辑或

循环语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# for 循环:
for (( counter=1; counter<=5; counter++ ))
do
echo "Welcome, this is iteration number $counter."
done

# while 循环:
counter=0

# 循环直到用户输入的数字等于5
while [ $counter -ne 5 ]; do
# 提示用户输入一个数字
echo "Enter a number (current count: $counter)"
read input_number

# 检查输入是否为数字
if ! [[ "$input_number" =~ ^[0-9]+$ ]]; then
echo "Error: Please enter a valid number."
continue # 如果输入无效,跳过当前循环的剩余部分
fi

# 将输入的数字赋值给计数器
counter=$input_number

# 打印当前计数器的值
echo "You entered: $counter"
done

# until 循环,与while类似
until condition; do ... done

# case语句
echo "Enter a number between 1 and 3:"
read number

case $number in
1) echo "You entered one.";;
2) echo "You entered two.";;
3) echo "You entered three.";;
*) echo "You did not enter a number between 1 and 3.";;
esac
Author

Efterklang

Posted on

2024-06-19

Updated on

2024-09-18

Licensed under

Comments