Shell语言入门笔记
shell编程环境也有许多,如Bourne Shell、Bourne Again Shell、C Shell、K Shell等,一般常用的是Bourne Again Shell(即bash),这也是linux系统默认的shell。
常用
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
| #!/bin/bash #指定shell解释器
#echo
echo '输出一些文字'
echo -e "OK!\n" #-e 开启转义
echo "hello world!" > myfile #结果重定向至文件
echo `date` #显示时间
#变量
var1='定义一个变量,等号周围没有空格'
readonly var1 #只读变量
unset var1 #删除变量
#字符串
echo '${var1},使用一个变量' #!!单引号中的所有字符都会被原样输出,引用变量无效
echo `expr index "$string" io` #查找字符i或o的位置(看哪个先出现)
echo ${#string} #获取字符串长度
-z #检测字符串长度是否为0
-n #检测字符串长度是否不为0
$ #检测字符串是否为空
#定义数组
array_n=(v0 v1 v2)
array_n[n]=vn #可以不使用连续的下标,而且下标的范围没有限制
${array_n[@]} #读取数组中的所有元素
#Shell 里面的中括号(包括单中括号与双中括号)可用于一些条件的测试
[ $var -eq 0 ] #变量是否为0
[ -e $var ] #文件是否存在
[ -d $var ] #是否是目录
[[ $var1 = $var2 ]] #字符串比较
-s file #检测文件是否存在,不为空返回true
-e file #检测文件(或目录)是否存在,如果是,返回true
#printf(不会自动换行),但更适合格式输出
read var #从键盘读入输入
readlink -f #一直跟随符号链接,直到直到非符号链接的文件位置
|
控制逻辑
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
42
43
44
| #if条件
if condition
then
command1
elif condition2
then
command2
else
command3
fi
#for循环
for var in i1 i2 i3
do
command1
command2
done
#while循环
while condition
do
command
done
#until循环:和while循环相反,直到条件为true时停止(用得少)
until condition
do
command
done
#case
case array in
1) command
;;
2) command
;;
*) command
;;
esac
|
运算符
原生bash不支持数学运算,但可以用awk和expr来进行求值操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #数学运算
val=`expr 2 + 2` #!!!表达式和运算法之间一定要有空格
#关系运算
-eq #equal
-ne #not equal
-gt #great than
-lt #lower than
-ge #great equal
-le #lower equal
#布尔运算
! #非
-o #或,有一个为true即为true (or)
-a #与,两个都为true才为true (and)
#逻辑运算
&& #逻辑的and [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| #逻辑的or [[ $a -lt 100 || $b -gt 100 ]] 返回 true
|
脚本参数
1
2
3
4
5
6
7
| $# #传递到脚本的参数个数
$* #显示所有向脚本传递的参数
$$ #脚本当前运行的进程ID号
$! #后台运行的最后一个进程的ID号
$@ #用引号分割,显示所有脚本参数
$- #显示shell使用的当前选项
$? #显示最后命令的退出状态。0表示没有错误。
|
1
2
3
4
5
6
7
8
| #注释相关
:<<'
这是一段多行注释'
:<<!
这也可以是一段多行注释!
#如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?每一行加个'#'符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。
|
set 命令
set
命令主要用来设置shell,在编写shell脚本时,使用set
命令能设置shell的执行方式,根据需求不同,采用的参数设置也不同。set
命令也用来显示系统中已存在的shell变量以及设置新的shell变量。
1
2
3
4
5
6
7
| set #显示环境变量
set -e #只要脚本中发生错误,就停止执行并退出shell(否则虽然报错,但是依旧会继续运行
set -u #如果遇到不存在的变量会报错并停止执行(否则不报错,也继续执行)
set -x #先输出执行的那一行命令
set -e #脚本只要发生错误,就终止执行
## tips:set后的后缀改成+号则会关闭该功能。
|