在
shell
中命令,不是单独存在的,可能需要多条命令结合使⽤ 将shell
命令按照⼀定的逻辑顺序组织在⼀个⽂件中,组合成⼀些列完整的功能命令要求,执⾏⽂件,就把其中的命令按照定义的逻辑依次执⾏---
这个shell⽂件就叫做
shell
脚本(写
shell
脚本就是
shell
编程)
shell
⽂件是以.sh作为后缀名
执⾏
shell
脚本
(
⽂件
)
:
对
shell
⽂件添加执⾏权限,按照执⾏程序的⽅式执⾏
chmod u+x xxxx.sh
./xxxx.sh
使⽤对应的
shell
解析器来解析执⾏
bash xxxx.sh
shell语法
1.
变量定义
变量=
值
2.
引⽤变量
$变量
3.
变量的输⼊
read 变量名
1
变量
2
变量
3 .....
如果输⼊的数据超过变量的个数,则最后⼀个变量存储之后所有数据
4.
变量的输出
echo $变量名
1 $
变量名
2...
5.
引号的作⽤
""---表⽰字符串:会解析引号中的变量
''----表⽰字符串:不会解析引号中的变量
6.
位置变量
$? :
获取上⼀条命令的执⾏结果(执⾏的状态值),若上⼀条命令执⾏
成功值$? = 0
,如果不成功为⾮
0
$1:第⼀个参数
$2:第⼆个参数
$3:第三个参数
....
$9:第九个参数
7.
条件判断
条件判断:
test
字符串:
s1 = s2-----判断相等
s1 != s2-----判断不相等
-z s1---------判断字符串⻓度是否为
0
-n s1--------判断字符串⻓度不为
0
整数:
a -gt b------判断a
是否⼤于
b
a -ge b------判断a
是否⼤于或等于
b
a -lt b------判断a
是否⼩于
b
a -le b------判断a
是否⼩于或等于
b
a -eq b------判断a
是否等于
b
a -ne b------判断a
是否不等于
b
⽂件测试:
-d fi lename----判断⽂件是否是⼀个⽬录
-e fi lename----判断⽂件是否存在
-f filename----判断⽂件是否是普通⽂件
-L fi lename----判断⽂件是否为符号链接⽂件
-s fi lename----判断⽂件是否存在且⻓度不为0
-r fi lename-----判断⽂件是否可读
-w fi lename----判断⽂件是否可写
-x fi lename-----判断⽂件是否可执⾏
-c fi lename-----判断⽂件是否为字符设备⽂件
逻辑运算:
-a : and 逻辑与 多个条件都为真,结果为真
-o :or
逻辑或 只要有⼀个条件为真,结果为真
! :not 逻辑⾮ 得到的结果与条件相反
9.
流程控制:
(1) 选择结构:
(2)循环结构
expr:算术指令
expr $1 算术运算符 $2
while [
条件表达式
]-----
满⾜条件表达式就执⾏循环,不满⾜就跳出
do
命令表
done
for
变量名
in
单词表
-----
如果变量能够从单词表中取出⼀个值进⾏
赋值,就循环执⾏⼀次
do
命令表
done
c
语⾔
for
循环格式
for((
循环起始语句
;
循环条件语句
;
每次执⾏循环后的改变条件的语
句
))
do
命令表
done
10.
函数
函数定义:
函数名()
{
命令集合
}
function 函数名
()
{
命令集合
}
函数调⽤:执⾏函数功能
函数名
在函数中如果有参数,则只需要在函数调⽤时传递参数就⾏,在函数定义时
不⽤写
函数名 值
1
值
2
值
3 ....
在函数的定义中,函数会默认存在位置变量,会⾃动使⽤位置变量来获取到
传递的值
函数返回值:
在函数体中,使⽤
echo
输出要返回的内容
在调⽤时,如果没有⽤变量来进⾏存储赋值,则打印结果,但是如果使⽤变
量进⾏存储赋值(调⽤函数是使⽤
`
`
来获取函数的执⾏结果)则不会打印,
叫做返回值存储到变量
如:
a=`add 1 2`