目录
shell脚本简介
- Shell脚本是实现Linux系统管理及自动化运维所必备的重要工具。
- 执行Shell提升运维人员的工作效率,减少不必要的重复工作。
- 将复杂而又反复的操作放在一个文件中,通过执行一个文件完成相应任务。
shell脚本的定义
- 脚本后缀:文件一般以.sh做后缀,也可以没有后缀
- 脚本开头:#!/bin/sh(#!用来声明脚本由什么shell解释,否则使用默认shell)
注:单个"#"号代表注释当前行
shell脚本执行方式
方式一:
设置文件具有可执行权限后
./c.sh
方式二:
bash c.sh
shell变量
定义语法:变量名=值
变量名:由数字、字母、下划线组成,数字不能开头,区分大小
举例:a_1=2020
注意:=赋值号两边不能有空格
使用变量值:$变量名 或者 ${变量名}
打印输出变量:使用echo命令可以显示单个变量取值
位置参数变量
应用场合:
当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,使用到位置参数变量。
比如 :
./cp.sh a.txt b.txt , 这个就是一个执行 shell 的命令行,可以在cp.sh脚本中获取到参数信息
$0:当前shell脚本文件名
$n:$1-$9 代表第1到第9个参数,10以上的参数,需要用大括号包含,如${10})
其他变量
$#:传给shell脚本参数的数量
$*:传给shell脚本参数的内容
$?:命令执行后返回的状态
"$?"用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)。
$$:当前进程的进程号
"$$"变量最常见的用途是用作临时文件的名字以保证临时文件不会重复
shell数值变量
shell中默认把变量值当作字符串
例如:
age=22 age=${age}+1 echo ${age} 输出结果为22+1,而不是23,因为shell将其解释为字符串,而不是数学运算。
let命令使其进行数学运算
例如:
let age=${age}+1
declare把变量定义为整型
例如:
declare -i age=22
这里就用 -i 选项把age定义为整型的了。此后每次运算,都把age的右值识别为算术表达式或数字。
条件测试
test命令:用于测试字符串、文件状态和数字
test格式: test condition 或[ condition ]
注:使用方括号时,要注意在条件两边加上空格
四种测试条件: 文件测试、字符串测试、数字测试、复合测试
文件测试:
作用:测试文件状态的条件表达式
- -e ——是否存在
- -d ——是目录
- -f ——是文件
- -s ——文件非空
- -r ——可读
- -w ——可写
- -x ——可执行
- -L——符号连接
- -c——是否字符设备
- -b——是否块设备
字符串测试:
作用:字符串比较
- -z ——空串
- -n ——非空串
- = ——两个字符串相等
- !=——两个字符串不相等
数值测试:
作用:数字比较
- -eq ——数值相等
- -ne ——数值不相等
- -gt ——数1大于数2
- -ge ——数1大于等于数2
- -le ——数1小于等于数2
- -lt ——数1小于数2
逻辑测试:
作用:逻辑正确与否
- -a ——与
- -o ——或
- !——非
if case for while
if格式
if [ 条件1 ] then 执行第一段程序 else 执行第二段程序 fi
注:如果if和then在同一行then后面需要加分号(;)
多重if格式
if [ 条件1 ]; then 执行第一段程序 elif [ 条件2 ]; then 执行第二段程序 else 执行第三段程序 fi
case格式
case $变量名称 in “第一个变量内容”) 程序段一;; “第二个变量内容”) 程序段二;; *) 其它程序段 exit 1 esac
for格式
注:列表内容可为字符串、文件、数字
for 变量 in 列表 do 程序段 done
while格式
while 条件测试 do 程序段 done