shell脚本:
是一门解释行语言
分类:
ksh
tcsh
sh
bash
查看系统支持的shell
/etc/shells
查看当前使用shell
echo $SHELL
shell数据类型:
字符型:
'sads' '1233' "jhsdajks"
数值型:
123 1 2 3 5
shell变量:
变量:一段被命名的内存空间
变量名:
一般具有实际意义的单词缩写
不能以关键字或特殊字符作为变量
不能以数字开头作为变量
定义变量:
variable_name=value
aa='123'
bb=123
变量分类:
环境变量:全系统都能使用的变量
printenv,env
定义环境变量export variable_name=value
在shell当中直接定义只在当前shell终端窗口生效
永久生效:/etc/profile
某用户生效:~/.bashrc
局部变量:
定义:aa=123
在shell当中直接定义只在当前shell终端窗口生效
或者只在脚本内生效
特殊变量:
$?:表示上一条执行指令的返回状态码
$n:n表示整数,$1表示脚本后面所跟的第一个参数
$0:表示脚本名称
$#:所有参数的个数
$*:列出所有的参数
$@:列出所有的参数
$$:查看脚本执行时的进程号
运算符:
数值运算符:
+:加
-:减
*:乘
/:商取整 10/3 3
%:取余 10%3 1
**:取幂 10**3 1000
布尔值预算符:
&&:与运算
||:或运算
!:非运算
关系运算符:
$aa和$$bb是数值
>:大于 [ $aa -gt $bb ]
<:小于 [ $aa -lt $bb ]
<=:小于等于 [ $aa -le $bb ]
>=:大于等于 [ $aa -ge $bb ]
==:等于 [ $aa -eq $bb ]
!=:不等于 [ $aa -ne $bb ]
shell语法:
第一行必须以#!/bin/bash作用指定解释器 必要
最好有缩进习惯 非必要
要有注释信息 非必要
打印:
#!/bin/bash
#
#
echo "hello world"
echo 'hello world'
"":弱引用 echo "$aa" 引用的是aa变量的值
'':强引用 echo '$aa' 就是打印$aa
echo -e '\t'打印一个制表符
printf "username:%s uid:%d" $user $uid
格式化输出
%s字符变量占位符
%d整数变量占位符
%f浮点变量占位符
%cASCII变量占位符
命令替换:
`command`:tab键上面的那个符号,专业一点叫做反引号
a=`date`:表示把变量名a的作用变为date指令
循环:
for 变量 in 范围
do
代码块
done
for i in {1..10}
do
echo $i
done
for i in `cat /etc/passed`
do
echo $i
done
for i in 1 2 3 4 5
do
echo $i
done
for i in ${array_name[*]}
do
echo $i
done
注意循环可以嵌套
for i in {1..9}
do
for j in {1..9}
do
$((i*j))
done
done
while循环:
while 条件
do
代码块
done
当条件为真的时候执行代码块
i=0
while [ $i -le 10 ]
do
echo $i
let i++
done
死循环:
while true
do
代码块
done
跳出循环:
break:跳出当前循环体
continue:跳出本次循环
exit:推出循环程序
条件判断:
if 条件;then
代码块1
else
代码块2
fi
条件为真的时候执行代码块1,其他情况执行代码块2
if 1>2;then
echo 'ok'
else
echo 'bad'
fi
if [ $a ];then
echo 'ok'
else
echo 'bad'
fi
表明$a存在时执行ok不存在执行bad
条件判断的嵌套
if 条件1;then
代码块
elif 条件2;then
代码块2
else
代码块3
fi
如果满足条件1执行代码块1
满足条件2执行代码块2
其他情况执行代码块3
分支选择:
case 变量 in
条件1)
代码块1
;;
条件2)
代码块2
;;
*)
代码块3
;;
esac
read -e -p 'please:' a
case $a in
1)
echo '$a'
;;
[a-z])
echo $a
;;
quit|exit)
exit 4
;;
*)
echo '其他非匹配输入'
;;
注意:脚本是按照顺询执行的所以需要把*写在最后,以免其他的模式被屏蔽