shell脚本的编写
shell脚本的编写:
1、bash的算术运算:bash不支持浮点型,取圆整(丢失小数点后的数值)
使bash执行算术运算必须按照以下格式书写:1、let 算术表达式 2、$[算术表达式] 3、$((算术表达式))
若变量一次步进幅度为1则可以写作:SUM++ | ++SUM ,SUM-- | --SUM
2、bash中的语句逻辑运算:
&&与运算 语句1&&语句2 语句1假便不在执行语句2
||或运算 语句1||语句2 语句1真便不在执行语句2
!非运算 !语句
在bash中逻辑与,与逻辑或称作短路操作符,既是只计算前面的语句
3、bash中的条件测试:
测试的表达式:
[ condition ] 作为命令
` condition ` shell中的关键字
test condition
(1)、整数测试:
-eq:等于 -gt:大于 -ge:大于等于 -lt:小于 -le:小于等于 -ne:不等于
例如: #test $A -eq $B
#A=40
#B=60
# [ $A -ge $B ] && echo "$A is the max number" || echo "$B is the max number"
(2)、字符串测试:
==:内容一样,做测试条件 !=:内容不一样 -z:是否为空,空为真,非空为假 -n:是否不为空,空为假,非空为真
例如:#[ -z "$A" ] && echo "A is null." || echo "A is not null!"
#[ "$A" = "$B" ] && echo "Yiyang" || echo "Not yiyang!"
(3)、文件测试
-e FILE 文件是否存在,存在为真,不存在为假
-f FILE 是否为普通文件
-d FILE 是否为目录
-h/-L FILE 是否为软连接
-b FILE 是否为块设备
-c FILE 是否为字符设备
-r FILE 当前用户对文件是否有读权限
-w FILE 写权限
-x FILE 执行权限
例如:#[ -e /tmp/scripts ] && [ -d /tmp/scripts ] && mkdir /tmp/scripts
4、sed:stream editor行编辑器:非交互式编辑器,没有破坏性,sed的工作模式是将文件的原内容拷贝到自己的模式空间中,对复制出的这份内容进行操作,并非对原内容进行操作,所以没有破坏性。
格式:sed "搜索内容command" inputfile,非交互式,将处理后的数据显示在屏幕上
搜索范围:/PATTERN/command #sed '/\<de.\{5\}\>/,/\<in\>/d' even.sh
/PATTERN1,/PATTERN2command 第一次符合PATTERN1到第一次符合PATTERN2的行
参数:d 删除行(例如:#sed‘5d’ even.sh)
p 显示匹配到的内容所在的行
-n 只显示被模式匹配到的内容
a\ 在匹配到内容的行下面添加一行或多行 #sed '3,5a\This is a new line' even.sh
i\ 在其行上面添加一行或多行 \nThis is second line
! 对匹配条件取反
* s sed 'ADDR1,[email protected]@[email protected]'
-e sed -e '' -e '' -e '' inputfile 连接多个处理机制(例如:
sed -e '1,[email protected] /.*/ \(/\)\{1\} @ \1 -e '/d' )
-i 直接修改原文件
-f 从另外的文件读取sed的处理机制并且对文件进行执行
5、for语句,其循环方式是遍历循环
格式:for 变量 in 列表;do
语句1;
语句2;
……
done
而在for循环中定义循环列表可以分为:简单列出、{1..20}(从1到20)、`seq 1 2 10`(从1开始每次加2循环到10)
如:计算100所有能被3整除的数的和
如:计算100以内所有偶数的和
6、while语句,其循环方式为只要条件满足就一直循环下去,否则将跳出循环
格式:while 条件;do
语句1
语句2
……
done
如:提醒用户输入一个用户名,如果用户输入的为空,则一直提醒其输入。
7、until语句,其循环方式和while正好相反,只要条件不满足则循环下去,否则将跳出循环
格式:until 条件;do
语句1
语句2
……
done
8、if语句:分为单分支、双分支、多分支
单分支:if 测试条件;then
语句
……
fi
如:创建目录/tmp/maintenance,如果存在就删除后在创建。
双分支:if 测试条件;then
语句
……
else
语句
……
fi
多分支:if 测试语句1;then
语句
……
elif 测试语句2;then
语句
……
elif 测试语句3;then
语句
……
else
语句
fi
如:检查/var/log下的所有文件,如果是普通文件就输出为普通文件,如果是目录就输出是目录,其他的则输出unknow。
当脚本书写完成之后:1、使用bash -n SCRIPTFILE检查脚本文件是否含有错误。2、使用bash SCRIPTFILE执行脚本文件,或者给脚本文件加上执行权限,直接对脚本文件进行执行!