一、shell中使用算术运算
1、let 算术表达式
Let C=$A+$B
Let支持的运算
let a+=$q 就是let a=a+$q
a++ 就a的自加1
a-- a自减1
--a
++a
2. $[算术运算表达式]
C=$[$A+$B]
3. $((算术表达式))
C=$(($A+$B))
4. expr 算术表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用
C=`expr $A + $B`
二、shell中的选择语句
If语句:
1、条件判断,控制结构:
单分支if语句;
if 判断条件; then
statement1
statement2
。。。。。
fi
2、双分支的if条件语句
if 判断条件; then
statement1
statement2
。。。。。
else
statement3
statement4
。。。。。
Fi
3、多分支的if语句
if 判断条件1; then
statement1
。。。。。
elif 判断条件2 ;then
statement2
。。。。。
elif 判断条件3 ;then
statement3
。。。。。
else
。。。。。
Fi
case语句:
case switch in (注:swich是变量)
value1)
statement
。。。
;;
value1)
statement
。。。
;;
*)
statement
。。。
;;
esac
二、循环语句
for循环:
for 变量 in 列表; do
循环体
done
注:遍历完成后退出
如何生成列表:seq [起始数 [步进数]] 结束数
所以列表可以有以下方式:
1、 1 2 3 4 5 ........
1、{1...100}
2、`seq [起始数 [步进数]] 结束数`
如:表示1到5
方式一: for i in 1 2 3 4 5 ; do
循环体
done
方式二:for i in {1...5} ; do
循环体
done
方式三:for i in `seq 1 5` ; do
循环体
done
for的另一种循环,类似c语言:
如:
for ((i=1;i<5;i++)); do
statement
。。。
。。。。
done
while循环语句:
while 判断条件(直到条件不符合停止循环); do
statement
。。。
。。。
done
until循环语句
until 判断条件(直到条件符合停止循环) ; do
statement
。。。
。。。
done
特殊循环语句:
while的特殊用法一:
while :;do
tatement
。。。
。。。
done
这是个死循环,会一直循环去,除非exit退出脚本或break跳出循环
while的特殊用法二:
while read LINE; do
statement
done < /PATH/TO/SOMEFILE
逐行读取//PATH/TO/SOMEFILE,并赋值给LINE
三、变量赋值等:
${parameter:-word}:如果parameter为空或未定义,则变量展开为“word”;否则,展开为parameter的值;
${parameter:+word}:如果parameter为空或未定义,不做任何操作;否则,则展开为“word”值;
${parameter:=word}:如果parameter为空或未定义,则变量展开为“word”,并将展开后的值赋值给parameter;
${parameter:offset}
${parameter:offset:length}:取子串,从offset处的后一个字符开始,取lenth长的子串;
四、给加上脚本配置文件
所谓配置文件就是脚本的一些变量在另一个文件中存的,然后该脚本可以获取配置文件的内容,在脚本中第一行代码中写入 . /PATH/TO/FILE_CONF
五、变量
局部变量(生命周期为所在的函数内)
local VAR_NAME=
环境变量:作用域为当前SHELL进程及其子进程
本地变量:arname=vlue 作用域为整个当前bash进程
位置变量:$1,$2,......(用于传递参数)
shift 替换已使用过的位置变量
shift n 替换n个位置变量
shift命令的使用:
位置变量在函数里代表函数的参数,$1表示第一个参数,$2表示函数的第二个参数
位置变量在整个脚本里则代表脚本的参数,$!代表该脚本的第一个参数$2代表第二个,以此类推,而shfit则是释放位置变量的,如过在$1被传递了参数后,加一个shift,则释放$1,
此时第二个参数就是$1,第三个参数变为$2,以此类推
特殊变量:$? 上一个命令的执行状态的返回值;
程序执行结束
程序状态反回代码(0-255)
0:正确执行
1-255 :错误执行,1、2、127系统预留;
$# 参数的个数
$* 参数列表
$@ 参数列表
$0: 执行脚本时的脚本路径及名称
$RANDOM 生成随机数 0-32768
$URANDOM
六、脚本中用的特殊命令mktemp
创建临时文件或目录
mktemp /tmp/file.XX
-d: 创建为目录
trap命令:脚本中,实现信号捕捉,但9和15无法捕捉
常见信号
kill -SIGNAL PID
1: HUP
2: INT
9: KILL
15: TERM
注:一行执行多个语句,语句间用分号分隔