0%

Linux 流程控制语句


if-then 语句

语法:

其中if后使用[]包裹的形式需要随使用条件进行替换。(符号中填入内容时,内容前后和符号要各空一格,比较符号前后各一个空格)

[[ ]] 可进行复杂的字符串和模式匹配

1
2
3
4
5
6
7
[[ 12 -gt 4 ]]

[[ "$var" == "value" ]]

[[ "var" =~ "value" ]]

[[ "var" = "value" ]]

(( )) 使用数学符号进行大小比较,支持 >, <, >=, <=, ==, != 等 C 风格操作符

1
(( 24 > 12 ))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if [ 条件1 ]; then
command1
fi
################################
if [ 条件1 ]; then
command2
else
command3
fi
################################
if [ 条件1 ]; then
command1
elif [ 条件2 ]; then
command2
else
command3
fi

case 语句

用于替代if-then的部分语句形式

语法

1
2
3
4
5
6
7
8
9
10
11
12
13
case $var in
value1)
command1
;;
value2)
command2
;;
value3)
command3
;;
*) # 匹配未匹配到的所有其他内容,使用✳匹配剩下所有
command4
esac

if-then的形式 || ↑↑ 相等↓ ↓ ||

1
2
3
4
5
6
7
8
9
if [ "$var" = "value" ]; then
command1
elif [ "$var" = "value" ]; then
command2
elif [ "$var" = "value" ]; then
command3
else # 匹配未匹配到的所有其他内容,使用else匹配剩下所有
command 4
fi

for 循环

语法

1
2
3
for var in item1 item2 item3; do
commands # 可以是if循环
done

C语言风格的循环

1
2
3
4
5
6
####################################################
for (( i=0; i<10;i++ )); do
echo "$i"
# echo $i 同上,可根据习惯选择是否添加双引号
done
####################################################

要求:列出文件夹/var/log下的文件,并判断文件的类型↓↓↓↓↓

1
2
3
4
5
6
7
8
9
10
11
####################################################
for file in /etc/ufw/*; do
if [ -d "$file" ]; then
echo "$file是文件夹"
elif [ -f "$file" ]; then
echo "$file是文件"
else
echo "$file不是文件也不是文件夹"
fi
done
###################################################

while 循环

语法

1
2
3
4
5
6
7
8
9
10
11
12
13
###################################################
while command1; do
commands
done
###################################################
只要最终结果大于0,就从12到1,挨个打印数字
###################################################
i=12
while [ $i -gt 0 ]; do
echo "$i"
i=$[ $i - 1] # 在bash shell中一般使用$[]来表示变量
done
###################################################

until 循环

1
2
3
4
5
6
7
8
9
###################################################
从100开始每减去20打印一个结果,直到小于0
###################################################
i=100 # 注意,在bash shell中赋值时等号左右不允许留空格
until [ $i -lt 0 ]; do
echo "$i"
i=$[ $i - 20 ]
done
###################################################

IFS 分词规范

IFS指的就是单词分割的规范,原始的默认分割规范为$' \n\t'

1
2
3
4
lod_ifs="$IFS"			# 保存原始的IFS值
IFS=$"\n" # 划定新的IFS值

IFS="$old_ifs" # 恢复旧的IFS值

breakcontinue

处理用户输入

1
bash var.sh value1 value2 value3

用户在使用bash运行脚本时可能会输入多个参数,该参数会被默认做标记。

  • 程序名 $0

  • 第一个参数 $1

  • 第二个参数 $2

  • $# 该特殊值可用于对脚本中的变量计数

  • $*

  • $@

1
2
3
4
5
6
7
8
9
10
11
=======================test3.sh=======================
total=[ $1 * $2 ] # 获取第一个参数和第二个参数的乘机
sum=[ $1 + $2 + $3 ] # 获取三个参数的和
echo "$0" # 打印$0参数----脚本名称
echo "$total"
echo "$sum"
====================运行结果============================
root@ubuntu:~/script# bash test3.sh 6 8 3 # 此处直接在执行的命令后添加参数,参数会被按顺序指定给$1/$2/$3
test3.sh
48
17

read 获取用户输入

使用read可以读取用户输入并系那个其赋值给变量

1
reap -p "please input your name:" name

-r 禁用反斜杠

-p "提示语句" 读取用户输入

-s 静默输入,用户输入时不显示输入内容

-t n 超时时间为n秒

-a 录入数组

输入和输出

文件描述符 缩写 描述
0 STDIN 标准输入
1 STDOUT 标准输出
2 STDERR 标准错误
1
2
3
exec 1>text.txt			# 将标准输出传入至文件text.txt

exec 1>>tetx.txt # 将标准输出追加至text.txt
1
2>/dev/null  		# 将错误输出指向/dev/null,丢弃错误输出

后台运行脚本

1
bash script.sh &			# 在命令后使用`&`符号即代表该命令将会在后台执行

函数

创建函数

1
2
3
function function_name {               				# function_name为函数的名字,语法同python
commands
}

创建库

库就是函数的集合,将多个函数写进一个文件并赋予不同的函数名字

图形化界面的构建

此处略过

sedgawk 用法

过于复杂,略过

正则表达式

基础正则表达式

扩展正则表达式