Linux Bash Shell 脚本编写

&> /dev/null

可放于echo末尾用于保持桌面整洁

shell脚本

创建文件时在末尾添加 .sh

在文件中首行写入#!/bin/bash后正常输入命令

保存后可使用sh +路径执行

也可给该文件添加执行权限x

直接输入该路径即可执行

read [用户输入数据] [变量名]:让用户输入数据并赋值到该变量(可在输入数据前加-p ”信息”,在输入数据时显示信息)

let 变量名++/–:使变量自增/自减1

参数

‘$#:’ 参数数量总和
‘$*:’ 所有参数
‘$?:’ 显示上一次命令的执行返回值
‘$num:’ 对应位置为第num的参数

测试语句

格式: 条件表达式

1
2
3
4
-d:测试文件是否为目录类型
-e:测试文件是否存在
-f:判断是否为一般文件
-r/w/x:测试当前用户是否有r/w/x权限

若判断结果为真则返回0,若判断结果为假则返回其他非零值

例:

1
2
3
[ -d /etc/abcde ] 

echo $?

若该文件为目录类型则会输出

1
0

若该文件不为目录类型则会输出其他非零值

整数比较:

1
2
3
4
5
6
7
格式:[ num1 运算符 num2 ]
-eq:是否等于
-ne:是否不等于
-gt:是否大于
-lt:是否小于
-le:是否等于或小于
-ge:是否大于或等于

如遇到报错”[: -gt: unarg operator expected”可用a=$((a))将变量转换为整数类型

字符串比较:

  • =:比较字符串内容是否相同(!=为不同)
    • 例:[ $a = $b ]:若相同则返回值为非零值,若不同则返回非零值
  • -z:判断字符串内容是否为空
    • 例:[ -z $a ]:若字符串为空则返回0,若不空则返回非零值

逻辑语句:

  • 一般基于测试结果进行,跟在测试语句后
  • 逻辑与:&&:在测试结果为真时才会执行
    • 例:[ -d /etc/a ] && echo “执行成功”
  • 若判断为假则不会有输出,若判断为真则会输出执行成功
  • 逻辑或:||:在测试结果为假时才会执行
  • 逻辑非:! : 将判断结果取反,直接加在条件表达式的首位

if条件测试语句:

单分支:

1
2
3
if[条件]为0则执行,不为0则不执行
then (指令)
fi (结束)

双分支:

1
2
3
4
if[条件]
then(指令)#若条件为0则会执行该指令
else(指令)#若条件不为0则会执行该指令
fi

多分支:

1
2
3
4
5
6
if[条件]
then (命令)
elif[条件2]
then (命令2)
else (命令3)
if

在条件中判断为0后会执行对应的then后的命令

for循环:

1
2
3
4
for [变量] in [取值列表]
do
命令列表
done

不解释
可配合cat遍历列表文件的所有行

1
2
3
4
for a in $(cat “./列表文件")
do
echo "$a"
done

while循环:

while 条件测试操作

1
2
3
do 
命令
done

用exit 0跳出循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case:

case “变量值” in
模式1)

命令

;;
模式2)

命令

;;
............
*)
# 以上都无法匹配时执行该命令
esac

例:

read输入字符

1
2
3
4
5
6
7
8
9
10
11
case "输入的字符" in

[a-z] | [A-Z] )
echo "字母"
;;
[0-9] )
echo "数字"
;;
*)
echo "特殊字符"
esac