Shell脚本笔记
前言
查看当前窗口是什么shell
1 |
|
shell脚本可以一次性执行多条命令,通常脚本文件以.sh
结尾,这称为批处理。
注释用#表示,但注意第一行的#!/bin/bash
表示以后面的解释器解释执行;
执行方式:
作为可执行文件
1
2chmod +x name.sh # 加上可执行权限
./name.sh # 执行脚本作为解释器参数
1
/bin/bash name.sh
其它,当前窗口执行,不产生子进程;
1
2source name.sh # source也常用于加载配置文件
. name.sh # 点号后面有个空格
一般使用第一种,作为可执行文件执行脚本。
语法
变量
shell变量分为局部变量和环境变量,局部变量一般小写,环境变量是大写;局部变量只有在当前shell实例中有效,所以从shell启动的程序(子进程)不能访问到局部变量,环境变量都可以被访问;子进程修改环境变量也不会影响父进程;
定义变量,注意,等号两边不能有空格;
1
var_name=zyue
使用变量,加上美元符合$;
1
2echo $var_name # 输出:zyue
echo ${var_name} # 加大括号,建议使用变量值是字符串时;
1
2
3
4
5
6
7
8
9
10
11
12
13# 加引号来包含空格
# 单引号里面字符都会原样输出
var_info='my name is ${var_name}'
echo var_info # 输出:my name is ${var_name}
# 双引号里面可以有变量,还可以有转义字符
var_info="my name is ${var_name}"
echo var_info # 输出:my name is zyue
# 获取字符串长度
string="abcd"
echo ${#string} #输出:4其它操作;
1
2
3
4
5
6
7
8
9
10
11# 只读变量,就不能更改了
readonly var_name
# 局部变量
local var_name=zyue
# 删除变量
unset var_name
# 将局部变量升级为全局变量
export var_name一维数组;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 不支持多维数组,shell只支持一维数组
# 定义,还有其它形式
array_name=(value0 value1 value2 value3)
# 读取 ${数组名[下标]}
valuen=${array_name[n]}
# 使用 @ 符号可以获取数组中的所有元素
echo ${array_name[@]}
# 取得数组元素的个数
length=${#array_name[@]}
# 取得数组单个元素的长度
len=${#array_name[n]}
参数
可以给待执行的shell脚本传递参数,脚本内获取参数的格式为:$n
,n 代表一个数字;
$0 为shell脚本的文件名;
$1 为执行脚本的第一个参数,以此类推;
$# 是传递的参数个数;
$?表示执行脚本后的退出状态,0表示执行成功,其它值是有错误;
$$ 表示当前进程号;
条件分支
自己看示例,和普通语言有些不同;
方括号[]两边的内测必须有空格分隔开!
1 |
|
case分支
1 |
|
循环语句
例一:
1 |
|
例二:
1 |
|
运算符
算术运算符,需要借助
expr
命令;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 普通算术代换,无空格 4种写法
var=88
echo $[var+1]
echo $((var+1))
echo $[$var+1]
echo $(($var+1))
# 使用变量进行算术计算
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a \* $b` # 需要转义,因为*也有通配符的含义
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"关系运算符,只支持数字
运算符 说明 举例 -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。 布尔运算符
运算符 说明 举例 ! 非运算,表达式为 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。 逻辑运算符
运算符 说明 举例 && 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false || 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true 字符串运算符
运算符 说明 举例 = 检测两个字符串是否相等,相等返回 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。
函数
只能返回int类型的值;
1 |
|
参考资料
Shell脚本笔记
http://example.com/2022/08/20/Shell脚本笔记/