Shell Script介绍
概念
Shell脚本是包含一系列命令的文本文件
Shell读取此文件并执行命令
应用场景
重复性操作
批量事务处理
自动化运维
定时任务执行
第一个Shell脚本
编写第一个Shell脚本test.sh
#!/bin/bash
echo “Hello World”
#! 是一个约定的标记
它告诉系统脚本需要什么解释器来执行
运行Shell脚本
/bin/sh test.sh
/bin/bash test.sh
./test.sh ## 使用该命令,需要给文件可执行权限
变量分为系统变量和自定义变量
varA=1234 # 不需要声明变量
unset varA # 撤销变量
varB=${varA/23/'A B C'} # 将23转换成A B C
var=${MYTEST} # 环境变量可以直接使用
thatVar=varA # thatVar 直接引用varA变量
var=${!thatVar} # 间接引用,将varA的值分配给var
var=`ls -l` # 将命令的结果分配给变量
变量作用域
全局变量
当前的整个 Shell 会话中有效
局部变量
只能在函数内部使用
环境变量
可以在其它 Shell 中使用
预定义变量
位置变量$n
$0代表命令本身,$1-$9代表顺序参数编号
大于10的话使用括号,如${10}
./test.sh #执行命令为 ./test.sh 10 20
echo "$0 $1 $2" # ./myShell.sh 10 20
echo "$*" # 10 20
echo "$#" # 参数个数为2
echo "$?" # 0
echo "$@" # 10 20
read读取控制台输入
read读取控制台输出语法
read(选项)(参数)
-p 后面跟提示信息,即在输入前打印提示信息
-t 后面跟秒数,定义输入字符的等待时间
# 需求:读取控制台输入的名字并打印
#!/bin/bash
read -t 30 -p "please enter your name in 30 seconds: " NAME
echo $NAME
Shell算术表达式和算术运算符
算术表达式语法
let c=a+b #变量计算中不需要加上$来表示变量
示例:let x=1+10
“$((运算式))”或“$[运算式]”
expr m + n
S=$[(5+3)*4] 或 S=$(((5+3)*4))
# expr分布计算
S=`expr 5 + 3`
expr $S * 4 # 注意:这里乘号之前需要转义
算术表达式支持各类算术运算符
+ - * / % = == !=
Shell条件表达式语法
条件测试语法
[ 条件表达式 ]
注意条件表示式前后要有空格
test 条件表达式
[[ 条件表达式 ]]
"[[",是关键字,"["是一条命令, 与test等价
[[ ... ]]测试结构比用[ ... ]更能防止脚本里的许多逻辑错误
[[ ]]支持字符串的模式匹配,
比如[[ hello == hell? ]],结果为真
条件成立时,结果为true,否则为false
Shell关系运算符
关系运算符只支持数字,返回true或false
Shell逻辑运算符
逻辑运算符,返回true或false
&& 和 || 可直接用于[[ ]] 语句中
Shell字符串运算符
字符串运算符,返回true或false
Shell文件运算符
文件运算符,返回true或false
流程控制 - if 判断
if 语句通过判断条件表达式的真假来决定执行哪个分支
if ... fi 语句;
if ... else ... fi 语句;
if ... elif ... else ... fi 语句;
使用shell判断a和b是否相等
#!/bin/sh
a=10
b=20
if [ $a == $b ]
then
echo "a is equal to b"
else
echo "a is not equal to b"
fi
流程控制 - case
case多分支条件判断
#!/bin/bash
case $1 in
"1")
echo "你输入的数字是1"
;;
"2")
echo "你输入的数字是2"
;;
*)
echo "你输入的数字是其他"
;;
esac
Shell条件表达式对比
条件表达式示例
# 我们可以用&&来替代if表达式
# 如示例,左边为真,则会执行&&右边的内容(打印),否则不执行
v1="Toronto"
v2="Beijing"
v3="Beijing"
[ "$v1" != "$v2" ] && echo "$v1 is not equal to $v2"
test "$v1" != "$v2" && echo "$v1 is not equal to $v2"
[[ "$v1" != "$v2" ]] && echo "$v1 is not equal to $v2"
[[ "$v1" != "$v2" && "$v2" == "$v3" ]] && echo "$v2 is equal to $v3"
循环语句 - for循环2-1
shell支持for循环
# 语法:
for 变量 in 值1 值2 值3…
do
程序
done
#示例:
#!/bin/bash
for arg in "$@"
do
echo "arg: $arg"
done
循环语句 - for循环2-2
for循环的另一种方式:
# 语法:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
#示例:
#!/bin/bash
for((i=1;i<=10;i++));
do
echo $(expr $i * 3 + 1);
done
循环语句-while循环
while循环语法
while [ 条件表达式 ]
do
程序
done
#或如下语法:
while [ 条件表达式 ] ;
do
程序
done
break可以跳出循环