1.安装文本编辑器(ubuntu)
sudo apt install vim
创建sh文件
vim aaa.sh
2.指定脚本解释器
#!/bin/bash --- 指定脚本解释器
echo "hello world"
1、定义变量:
aaa_bbb="ccc"
2、使用变量
aaa_bbb="ccc"
echo $aaa_bbb
echo ${aaa_bbb} #花括号是帮助解释器识别变量的边界推荐写法
3、只读变量(常量)
#!/bin/bash
aaa_bbb="https://www.baidu.com"
readonly aaa_bbb #只读变量
4、删除变量
unset aaa_bbb #不能删除只读变量
单引号
aaa='bbb' #单引号字符串中的变量是无效的
双引号
aaa='bbb'
ccc="Hello, \"$aaa\"! \n" #双引号里可以有变量,双引号里可以出现转义字符
echo -e $ccc #输出转义字符
输出结果为:Hello,bbb!
拼接字符串
aaa="bbb"
# 使用双引号拼接
ccc="hello, "$aaa" !"
ddd="hello, ${aaa} !"
获取字符串长度
aaa="bbb"
echo ${#aaa}
输出结果:3
提取字符串
从字符串第 2 个字符开始截取 4 个字符(下标从0开始):
string="abcdefghijklmn"
echo ${string:1:4}
执行结果bcde
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
定义数组
数组名=(值1 值2 ... 值n) #数组元素用"空格"符号分割开
array_name[0]=value0 #通过下标定义数组中的其中一个元素
读取数组
${数组名[下标]}
echo ${array_name[@]} #使用 **@** 符号可以获取数组中的所有元素
获取数组的长度
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
1、算数运算符
常用的算术运算符,假定变量 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。 |
注意:
2、字符串运算符
下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 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。 |
3、关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
-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。 |
4、布尔运算符
下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
! | 非运算,表达式为 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。 |
5、逻辑运算符
假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
&& | 逻辑与 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 逻辑或 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
1、if 语句:
condition 条件
command 命令
if condition
then
command1
command2
...
commandN
fi
2、if else 语句:
if condition
then
command1
command2
...
commandN
else
command
fi
3、if else-if else 语句:
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
4、for 循环
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
5、while循环
while循环用于不断执行一系列命令,也用于从输入文件中读取数据
while condition
do
command
done
6、case … esac语句
case … esac 与其他语言中的 switch … case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。
case 后为取值,值可以为变量或常数。模式支持正则表达式。
case 值 in
模式1)
command1
command2
command3
;;
模式2)
command1
command2
command3
;;
*)
command1
command2
command3
;;
esac
[ function ] funname [()]
{
action;
[return int;]
}
注意:
- 1、可以使用function fun() 定义函数,也可以直接fun() 定义,不带任何参数。
- 2、函数参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
下面我们将定义一个函数,并发生函数调用
#!/bin/bash
aaa(){
echo "这是第一个函数!"
}
echo "-----这里是函数开始执行-----"
aaa
echo "-----这里是函数执行完毕-----"
下面,我们定义一个带有return语句的函数:
function czbk(){
echo "对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
czbk
echo "输入的两个数字之和为 $? !"
函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
函数参数
在 Shell 中,调用函数时可以向其传递参数。在函数体内部, 通过 $n 的形式来获取参数的值,例如, $1 表示第一个参数, 2 表示第二个参数 . . . 注意,当 n > = 10 时,需要使用 2 表示第二个参数... 注意, 当 n>=10 时,需要使用 2表示第二个参数...注意,当n>=10时,需要使用{n}来获取参数。
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73