什么是shell脚本?
一系列shell命令的有序集合叫做shell脚本。
shell脚本是解释型语言,解释型语言不需要编译,可以直接执行,如果报错也会执行
一、shell脚本的创建和使用
1.创建以 .sh 为后缀的脚本文件
以test.sh为例
2.写一段shell命令:echo "Morning Sir!"
3.执行文件(两种办法)
3.1.用解释器bash test.sh
3.2通过chmod修改文件权限,然后./ 需要执行的shell脚本执行文件,
注意:该方法需要在开头加上#!/bin/bash 告诉系统./运行时使用哪个解释器(这一句话不能写错)
二、变量
1.用户自定义变量
- 在shell脚本中,只有一种数据类型叫字符串
- 变量不需要定义,可以直接使用
- 给变量赋值时需要注意:(1)等号两边不能有空格
- (2)123,'123',"123"是相同的
- 如果想要使用变量里面的值,需要在变量名前加$符号
- 如果需要在" "中使用变量的值,如果变量是数字,需要把变量名放在[ ]中,如果是字符,需要放在{ }中
- ' '中无法使用变量的值
- 如果不想使用变量里的值时,可以用unset将变量的值清空
2.位置变量
$0--$9
位置变量,表示命令行参数
$0 命令行第0个参数
$1 命令行第1个参数
3.预定义变量
$# :打印除了文件名以外命令行参数的个数
$@/$* :打印所有的除了文件名
$? :上一条语句的执行结果,0为真,非0为假
$$ :进程号
4.环境变量
env 查看所有的环境变量
$HOME 表示家目录的路径
$PATH 表示编译器路径
三、语句
1.解释性语句:# 注释
2.功能性语句:read、test
read:从终端上读取内容到变量中
read 变量1 变量2 ...
注意:换行(回车)是结束输入的标志,每个输入之间以空格隔开
参数:
-p: 加入提示信息 read -p "input the num" var1 var2
-t: 限制输入时间,时间内不输入则停止 read -t 5 var1 var2
-n: 限制输入的个数 (空格也包括在内) read -n 5 var1 var2
-s: 隐藏输入的内容 read -s var1 var2
test
test能比较的内容为:
字符串 整型 文件
1、字符串
test 字符串1 = 字符串 (等号两边加空格) 判断字符串是否相等
test 字符串1 != 字符串 判断字符串是否不等
test -z 字符串 测试字符串长度是否为0
test -n 字符串 测试字符串长度是否不为0
2、整型
-eq 判断是否相等
-ne 判断是否不等
-gt 大于关系
-lt 小于关系
-ge 大于等于
-le 小于等于
3.文件
-r 文件可读
-w 文件可写
-x 文件可执行
-e 文件存在
-s 文件存在且有内容
-f 文件为普通文件
-d 文件为目录文件
-L 文件为链接文件
-c 文件为字符设备文件
-b 文件为块设备文件
-p 文件为管道文件
f1 -nt f2 文件1比文件2新
f1 -ot f2 文件1比文件2旧
expr
expr后面可以跟算术运算
val = expr 1 + 2
特殊的是乘法,需要在*前面加一个\转义,也就是\*
val= expr 1 \* 2
val=
3.控制语句
if 表达式
then 需要执行的语句
fi
表达式有两种方式:(1)test -e 文件名
(2)[ -e 文件名 ] 注意: [ ]方括号内部需要有空格隔开
case $变量名 in
1)
代码
;;
2)
代码
;;
*)
代码
;;
esac
while
while 表达式
do
代码
done
while ture :死循环
如果想让变量自+1
可以写成了let val++;
1. for i in 单词表 // for i in ({1..10})
do
代码
done
2. for((i=0;i<10;i++))
do
代码
done
3. for i in `seq 5` (i从1执行到5)
do
代码
done
break和continue
break:跳出循环
continue:跳过本次循环,继续执行下一次循环
break n 跳出n层循环
continue n n层
函数
func ()
{
代码
}
如果要调用func函数,那么函数的定义一定写在调用之前
如果函数需要参数,则可以用函数名 $ 变量名 的形式传参数,
函数内部用$1 $2 ...来访问参数的值
函数可以有返回值,可以在调用函数的下一条语句用$?来查询
调用函数时直接写函数名