shell 编程
- 绝对路径 /root/scripts/file.sh #要有执行权限
- 相对路径 ./file.sh #要有执行权限
- bash + 脚本名 #不需要执行权限和编译
- source 脚本名 #脚本中的变量会在当前 shll 生效
前面三种是在子 shell 中执行,第四种是在当前 shell 执行
$[]
,中括号里面可以进行运算
位置化参数
$0 脚本名
$1 第1个参数
$* 所有的参数,双引号引起来时参数视为单个字符串
$@ 所有的参数,双引号引起来时,每个参数作为一个个体
$# 参数的个数
$$ 当前进程的 PID
$? 上一个命令的返回值,0表示成功
read
从命令行中输入字符串,赋值给一个变量
read -p "Enter your name:" NAME
[student@example Documents]$ read -p "Enter your name:" NAME
Enter your name:zhangsan
[student@example Documents]$
不加变量名,默认赋值给 REPLY 变量。
-t 超时时间(秒)
exit 退出码
程序执行后会携带一个退出码
0 代表成功,1-255 代表失败;储存在系统变量 $? 中;exit num 可以中断程序并设置退出码为 num
例如,判断 /etc/profile
文件里是否有关键字 HISTSIZE
[student@example Documents]$ grep HISTSIZE /etc/profile
HISTSIZE=1000
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
[student@example Documents]$ echo $?
0
条件执行运算符
&&
代表逻辑与,前一个命令执行成功会执行后一个||
代表逻辑或,前一个命令执行成功,后面的命令不会再执行
布尔运算符
! 非运算
-o 或运算
-a 与运算
数值运算符
判断变量是不是数字:
[["$num10" =~ ^[0-9]+$ ]]
ps: shell中各种括号的作用()、(())、[]、[[]]、{}
字符串运算符
= 检测两个字符串是否相等。 等于返回 0 [ $a = $b ]
!= 检测两个字符串是否相等。等于返回 1 [ $a != $b ]
[ -n “$A” ] 判断变量是否定义
条件判断
if 条件表达式
then
指令
fi
if 条件表达式;then
指令
fi
if 条件表达式;then
指令1
else
指令2
fi
if 条件表达式1;then
指令1
elif 件表达式2;then
指令2
else
指令3
fi
case语句
case 变量名 in
值1)
指令1
;;
值2)
指令2
;;
*)
指令4
;;
esac
for循环
直接列出元素
for i in 1 3 5
do
指令
done
使用大括号
for i in {1...5}
do
指令
done
使用 seq
for i in $(seq 1 5)
do
指令
done
使用命令的结果
for i in $(ls *.sh)
do
指令
done
(未完待续)