1.交互式:用户每输入一条命令就立即执行
2.批处理:由用户事先编写好一个完整的shell脚本,shell会一次性执行脚本中的诸多文件。
第一个批处理式shell脚本
vim zy.sh
#!/bin/bash 使用哪种shell解释器来执行该脚本
#first example
pwd
ls -al
运行shell脚本的两种方式
- bash zy.sh
- ./example zy.sh
第一个交互式shell脚本
$0 对应的是当前Shell脚本程序的名称
$# 对应的是总共有几个参数
$* 对应的是所有位置的参数值
$? 对应的是显示上一次命令的执行返回值
$1、$2、$3....则分别#!/bim/bash
例子
#第一个交互式shell脚本 echo "当前脚本的名称为$0" echo "总共有$#个参数,分别是$*" echo "第一个参数值为$1,第5个参数值为$5"对应着第N个位置的参数值
运行截图如下
判断用户的参数
条件测试语句的执行格式
]
条件成立则返回数字0,否则便返回其他随机数值。
分为四种:
- 文件测试语句;
- 罗技测试语句
- 整数值比较语句
- 字符串比较语句
文件测试所用的参数
运算符 | 作用 |
---|---|
-d | 测试文件是否为目录类型 |
-e | 测试文件是否存在 |
-f | 判断是否为一般文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
eg: [ -f /etc/fstab]
echo $?>
与或非
||或命令 ||前命令执行成功才会执行后面的命令
&&与命令 &&前命令执行失败才会执行后面的命令
!非命令 !取反
eg: [ ! $USER = root] && echo "user" || echo "root "
整数比较运算符
可用的整数比较运算符
运算符 | 作用 |
---|---|
-eq | 是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否等于或小于 |
-ge | 是否大于或等于 |
字符串比较运算符
常见的字符串比较运算符
运算符 | 作用 |
---|---|
= | 比较字符串内容是否相同 |
!= | 比较字符串内容是否不同 |
-z | 判断字符串内容是否为空 |
流程控制语句
- if
- for
- while
- case
if
单分支的if语句
eg:
vim 123.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
if双分支结构
通过-c参数来规定尝试的次数,并使用-i参数定义每个数据包的发送间隔,以及使用-W参数定义等待超时时间。
[root@linuxprobe ~]# vim chkhost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi
if多分支结构
[root@linuxprobe ~]# vim chkscore.sh
#!/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
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):88
88 is Excellent
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):80
80 is Pass
for条件循环语句
eg:
[root@linuxprobe ~]# vim Example.sh
#!/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
Comments NOTHING