文章目录
Shell 编程基础
概念
Shell 是一个程序,同时也是一种程序设计语言。从程序的角度看,Shell 是命令解析器,常用的 Shell 命令解析器有 sh、ash 和 bash 等,我们的系统默认使用 bash。从程序设计语言的角度看,它设计了程序语言所需的相关结构,如变量、条件语句、分支语句、循环语句和函数等。
Shell 的调用
系统调用
- 开机调用:
/etc/profile
- 用户登录调用:
~/.bashrc
自定义的手动调用
#!
: 说明执行该 Shell 脚本的解释器#
: 注释
执行方式
-
方式1:
./shell脚本名
使用#!
中指明的解析器,如果没有指明则使用默认的解析器,并会开启子Shell。 -
方式2:
命令解析器名 shell脚本名
使用指定的解析器,不考虑代码中#!
说明的 shell,会开启子Shell。 -
方式3:
. shell脚本名
不会开启子Shell,使用当前的 shell。
注意事项
- Shell 文件需具备执行权限。可使用命令:
chmod +x shell脚本名
- 不要在 Windows 中编写 Shell 脚本再在 Linux 系统中使用,因为 Windows 对
/
的解释与 Linux 中不同。
变量
分类
- 系统提供的变量
- 自定义变量
- 预定义变量
变量的定义与初始化
- 定义:
变量名=值
- 修改值:
变量名=新值
- 取值:
$变量名
只读变量
- 定义:
readonly 变量名=值
转换为数字
- 定义:
declare -i 变量名
撤销变量
- 撤销:
unset 变量名
导出变量
- 导出:
export 变量名
注意:导出到父 shell。
查看系统变量命令
env
预定义变量
$#
: 参数个数$*
: 所有参数$1, $2, ...
: 第一个、第二个参数$?
: 上一个命令的返回状态$0
: 脚本名称$$
: 当前Shell的进程ID
脚本变量的特殊用法
-
""
: 会解析变量num=10 echo "$num" # 结果是 10
-
''
: 不会解析变量num=10 echo '$num' $num # 输出 '$num' 10
-
`
: 会解析命令echo `date` # 打印当前时间
-
( 代码 )
: 会在子Shell中执行
注意:代码之间需有空格,子Shell可访问父Shell的变量,父Shell不能访问子Shell中的变量。num=10 ( num=1 echo $num # 输出 1 ) echo $num # 输出 10
-
{ 代码 }
: 在当前 shell 中执行
注意:代码之间需有空格。
测试
语法
test 条件
[ 条件 ]
测试文件
-e
: 是否存在-d
: 是否为目录-f
: 是否为文件-r
: 是否可读-w
: 是否可写-x
: 是否可执行-L
: 是否是链接-c
: 是否为字符设备-b
: 是否为块设备-s
: 是否非空
测试字符串
=
: 判断字符串内容是否相同!=
: 判断字符串是否不相同-z
: 判断字符串是否为空串-n
: 判断字符串是否为非空
比较大小
-eq
: 相等-ne
: 不相等-gt
: 大于-ge
: 大于等于-lt
: 小于-le
: 小于等于
复合条件
&&
: 与||
: 或-a
: 与-o
: 或!
: 非
条件语句
if
语句
if [ 条件 ]; then
执行语句
elif [ 条件 ]; then
执行语句
...
else
执行语句
fi
case
语句
case $变量名 in
"值")
执行语句
;;
"值")
执行语句
;;
*)
执行语句
;;
esac
循环语句
for
语句
- 语法1:
for (( 初始化变量; 条件; 改变变量 ))
do
执行语句
done
- 语法2:
for 变量名 in 遍历的内容
do
执行语句
done
while
语句
while [ 条件 ]
do
执行语句
done
until
语句
until [ 条件 ]
do
执行语句
done
函数
定义函数
- 语法1:
函数名(){
执行语句
}
- 语法2:
function 函数名(){
执行语句
}
调用函数
函数名 参数1 参数2 ...
关键字
return
: 结束函数return xxx
: 结束函数并返回xxx
break
: 跳出当前循环exit 1
: 退出当前程序
以上就是 Shell 编程的基本知识。