shell script的简单介绍
shell变量
1.命名规则
2.定义变量:name=value
3.使用变量:$name
4.只读变量:readonly name
5.删除变量:uset name
6.变量类型
shell字符串
- 双引号:可解析变量,可以出现转义字符
- 单引号:不解析变量,原样输出
- 字符串拼接:
name="hello"
# 使用双引号拼接
greeting="hello, "$name" !"
greeting_1="hello, $name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$name' !'
greeting_3='hello, ${name} !'
echo $greeting_2 $greeting_3
输出结果为:
hello, hello ! hello, hello} !
hello, hello ! hello, ${name} !
- 获取字符串长度
string="abcd"
echo ${#string} #输出 4
- 提取子字符串
string="hello world"
echo ${string:1:4}#输出 ello
# 字符串下标从0开始
- 查找子字符串
string="hello world"
echo `expr index $string e`#输出2
7.反引号和$()一样,里面的语句当作命令执行
shell数组
- 数组定义:arrname=(value0 value1 value3)
- 数组读取:${arrname[]},中括号内为数组下标,从0开始
- 获取数组长度:length=${#arrname[@]},*号也可以
- 或许数组单个元素的长度:lengthn=${#arrname[n]},n为数组下标
shell注释
- 单行注释:#
- 多行注释:<<EOF以EOF结束,EOF可以是任意字母
shell传递参数
- 向脚本传参
- 特殊参数
shell运算符
- 算数运算符
假设变量a=10,b=20
+ | 加法 | expr $a + $b 结果为 30。 |
- | 减法 | expr $a - $b 结果为 -10。 |
* | 乘法 | expr $a \* $b 结果为 200。 |
/ | 除法 | expr $b / $a 结果为 2。 |
% | 取余 | expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等 | 用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。 |
!= | 不相等 | 用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。 |
- 关系运算符
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
- 逻辑运算符
&& | 逻辑的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 逻辑的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
- 布尔运算符
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [ ! false ] 返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false |
- 字符串运算符
假设变量a=hello,b=world
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否不为 0,不为 0 返回 true。 | [ -n "$a" ] 返回 true。 |
$ | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true |
- 文件测试运算符
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | [ -c $file ] 返回 false。 |
-d file | 检测文件是否是目录,如果是,则返回 true。 | [ -d $file ] 返回 false。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | [ -f $file ] 返回 true。 |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 | [ -g $file ] 返回 false。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | [ -k $file ] 返回 false。 |
-p file | 检测文件是否是有管道,如果是,则返回 true。 | [ -p $file ] 返回 false。 |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | [ -u $file ] 返回 false。 |
-r file | 检测文件是否可读,如果是,则返回 true。 | [ -r $file ] 返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 | [ -w $file ] 返回 true。 |
-x file | 检测文件是否可执行,如果是,则返回 true。 | [ -x $file ] 返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | [ -e $file ] 返回 true |
流程控制
- if 语句语法格式:
if condition
then
command1
command2
...
commandN
fi
- if else 语法格式:
if condition
then
command1
command2
...
commandN
else
command
fi
- if else-if else 语法格式:
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
for循环一般格式为:
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
- while 循环一般格式
while condition
do
command
done
- until 循环一般格式
until condition
do
command
done
- case in格式
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
- 跳出循环:
函数定义
输入输出重定向
- 文件描述符
- stdin<file 标准输入重定向
- stdout>file 标准输出重定向
- stderr>>file 标准错误输出重定向,以追加的方式
shell文件包含
- .filename
- source filename