Shell脚本基础知识
写shell脚本时需要在文件头部 #!/bin/sh 来指定解释器,以下的环境为rhel-7.1
1.变量
1.1 本地变量
变量名=值 eg: aa=123
注意:不会影响子shell,变量名字以数字,字母,下划线组成,不能以数字开头,等号两边不可有空格,当值有空格时用引号引起例如:aa=' sasas'
read -p "请输入一个值" aa 用户交互输入将值赋值给aa
1.2 环境变量
export 变量名=值
和本地变量的区别是可以影响子shell
env 命令可以查看系统所有的环境变量
常见的环境变量
$USER 当前的用户
$UID 当前用户的UID
$HOME 当前用户家目录
$HISTSIZE 历史命令的存储最大值
$HISTFILE 历史命令的存储位置
$PATH 当输入的命令未指定路径时,则在默认路径查找path输出的为默认路径
$PS1 该环境变量决定的是 的提示信息
$PS2 该环境变量决定的是反斜线后的提示符
1.3 位置变量
$0 表示脚本名称
$1 表示第一个参数,以此类推,当成为两位数及其以上需要用大括号例如${10}代表第10个参数
$# 表示参数的个数
$? 表示所有参数的值
写如下脚本进行测试
#!/bin/sh
# test.sh
echo "one is : $1"
echo "three is : $3"
echo "two is : $2"
echo "ALL is :$# There are: $*"
给文件增加执行权限 chmod +x ./test.sh
./test.sh bob tom jerry
输出
2.返回值
$? 表示返回值
不仅可以表示命令等的正确错误还可以表示逻辑错误
正确返回0 不正确返回非0
例如 ifconfig 执行完毕则 echo $? 返回 0
asssasasa 执行完毕 echo $? 返回 123 非0
$? 的值一直不断的在变化
逻辑错误例如: cat /etc/passwd | grep tomxxx 当无结果时 $?的值为非0 当有结果时,结果为0
3.数值运算
echo 1+2 输出 1+2
echo $((1+2)) 输出 3
echo $[1+2] 输出 3
let aa=1+2
echo $aa 输出3
aa=1+2
declare -i aa
echo $aa 输出3
当除法计算小数时候 echo 'scale=4;2/3' | bc 输出 .6666 scale=n代表保留小数后n位
4.对比
[ 比较 ] [[ 比较 ]]
第二种 比 第一种支持正则等
数值的比较 -eq 等于 -gt 大于 -ge 大于等于
-ne 不等于 -lt 小于 -le 小于等于
字符串的比较 == <= >= != > <
文件属性 [ -属性 /path/file ] 属性有 r w x f d l b e
连接符 && ||
5.判断语句
5.1 if判断
if 条件; then
命令1
命令2
elif 条件2; then
命令1
命令2
elif ......
else
命令1
命令2
fi
5.2 case判断
case 变量 in
值1)
命令1
;;
值2)
命令2
;;
值x)
命令x
;;
*)
命令
;;
esac
6.循环
6.1 for循环
for 变量 in 值1 值2 值3
do
循环内容
done
6.2 while循环
while 变量
do
循环内容
done
while循环可以用来读取文件的内容
eg:输出/etc/passwd文件的内容
while read aa
do
echo $aa
done < /etc/passwd
7.函数
function 函数名(){
函数体
}
调用直接使用 函数名即可
eg: test.sh
#!/bin/sh
function test(){
echo "this is a test"
}
test
输出 this is a test