1.Shell脚本
1.1 shell 脚本,命令的堆积,有交互式和批处理式,使用较多的是批处理式的(不需要人为干预)。
脚本的组成:
1.脚本声明
#!/bin/bash
2.脚本注释
# 该脚本作安装环境用
3.脚本命令
pwd,ls......
1.2 接收用户的参数:
以便灵活完成工作,Linux 内设了接收参数的变量:
$0 :对应当前 Shell 脚本程序的名称;
$# :对应总共有几个参数;
$* :对应所有位置的参数值;
$? :对应显示上一次命令的执行返回值(0与非0:0为执行成功;非0为执行失败,也可以视为执行命令后报错)
$1,$2,$3 .....:分别对应第N个位置的参数值。
1.3 判断用户的参数:
测试语句格式:[ 条件表达式 ] 注意条件表达式两边均有空格!
条件测试语句可以分为以下4种:
文件测试语句
逻辑测试语句
整数值比较语句
字符串比较语句
文件测试参数
操作符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
逻辑测试:
逻辑‘’与‘’:运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令;
逻辑“或”:运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令;
逻辑“非”:在Linux系统中的运算符号是一个叹号(!),它表示把条件测试中的判断结果取相反值。
整数比较运算符
操作符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
字符串比较运算符
操作符 作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
2.流程控制语句
2.1 if条件测试语句
单分支 if 语句:
if 条件测试操作(目录不存在)
then 命令序列(创建该目录)
fi
双分支 if 语句:
if 条件测试操作(能 ping 通)
then 命令序列(提示服务器正常运行)
else 命令序列(报警服务器出现问题)
fi
多分支 if 语句:(else if 可缩写为:elif)
if 条件测试操作1(分数85-100)
then 命令序列1(判为优秀)
elif 条件测试操作2(70-84)
then 命令序列2(判为合格)
else
命令序列3(判为不合格)
fi
eg:
#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi
2.2 for条件循环语句
for 变量名(用户名) in 取值列表(列表文件)
do
命令序列(创建用户并设置密码)
done
eg:
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done
运行结果:
[root@linuxprobe ~]# bash createuser.sh
Enter The Users Password : linuxprobe
andy , Create success
barry , Create success
carl , Create success
duke , Create success
eric , Create success
george , Create success
2.3 while条件循环语句
while 条件测试操作(为猜中价格)
do
命令序列(反复猜测商品价格)
done
eg:
[root@linuxprobe ~]# vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999之间,猜猜看是多少?"
while true
do
read -p "请输入您猜测的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答对了,实际价格是 $PRICE"
echo "您总共猜测了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done