linux就该这么学 第五课

shell脚本分为批处理式的和交互式的

shell脚本有三部分组成
1、脚本声明 #! /bin/bash
2、脚本的注释 #对功能和参数的解释
3、脚本的命令

例如: vim /haha.sh 注意:脚本以.sh结尾 注释信息可以写也可以不写,也可以写多行
#! /bin/bash
# ls pwd
pwd
ls - l


执行的时候可以用 /haha.sh 需要对文件有执行权限 也可以 bash haha.sh

1、接收参数的能力
2、有判断的功能
vim haha.sh
#!/bin/bash
echo "$0" $0 脚本的名称
echo “$# ,$*” $#表示 一共几个变量 $*表示分别是什么
echo "$1 ,$3 ,$5" 显示第一个,第三个,第五个参数

bash haha.sh a b c d e f

haha.sh
6, a b c d e f
a,e,e

文件判断 逻辑判断 整数判断 字符串判断
文件判断
[ -f /etc/fstab] 判断fstab是否存在的并且是否是文件 []两边要有空格
echo $? 显示上一次的结果 0表示成立 1表示不成立
[ -d /dev ] 判断dev是否是个目录,是否存在

逻辑操作符 && 逻辑和或逻辑与 ,若前面语句执行成功则执行后面的语句
例如 [ -d /etc ] && echo “OK” 如果etc存在并是目录 那么输出OK,否则什么都不输出
|| 逻辑或 若前面语句执行失败,则执行后面的语句
例如 [ $USER = root ] && echo “admin” || echo “user”
若变量USER是root则输出admin否则说出user
! 逻辑非 取反 [ !$USER = root ] 判断变量USER是否不是root

-z 判断字符串内容是否为空
[ -z $HAHA ] 判断HAHA变量是否是空值 ,0为变量不存在,1为变量已经存在了,赋值变量前检查变量是否存在
数字比较符号
- gt 大于 -eq 等于 - lt 小于 -le 小于等于 -ge 大于等于 -ne 不等于
例如 查看内存是否小于1g
free -m |grep Mem:| awk ‘{print $4}‘ 提取剩余内存值
[ `free -m | grep Mem:| awk ‘{print $4}‘` - lt 1024 ] && echo “buzu” || echo “chongzu”
当前的使用内存是否小于1024 如果小于 输出buzu 否则 输出chongzu
free -m 显示以兆为单位内存
搜索Mem:的行
从行中提取出第四列awk ‘{print $4}

单分支条件语句 只有一次判断机会
if条件测试语句 -e 表示是否存在,不论文件或者文件
#! /bin/bash
if [ !-e /media/haha]
then
mkdir /media/haha then 后面可以跟多条命令
fi
双分支条件语句 可以有两次判断机会
#!/bin/bash
ping -c 3 -i 0.2 -w 3 $1 &> /dev/null -c 次数 -i 间隔时间 -w 超时时间
if [ $? -eq 0]
then
echo“HOST $1 is On-line”
else
echo "Host $1 is Off-line"
fi
bash haha.sh 192.168.10.10

多重分支条件语句
#!/bin/bash
read -p "Enter :" GRADE elif可以使用多次
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ;then
echo “henhao”
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
echo "Pass"
else
echo “Failure”
fi

for循环语句
vim /user.txt
zhangsan
lisi
wangwu
zhaosi
#! /bin/bash
read -p “Enter” PASSWD
for UNAME `cat users.txt`
do RHCE中会考FOR语句
id $UNAME &>/dev/null
if [ $? -eq 0 ]
then
echo "cunzai"
else
useradd $UNAME &> /dev/null
echo “$PASSWD”| passwd --stdin $UNAME &>/dev/null
fi
done
说明:在脚本中还可以加if条件语句,比如如果新建用户成功输出指定信息,不成功输出指定信息

测试一个文本中的IP地址是否在线
vim /ip.txt
192.168.10.10
192.168.10.20
192.168.10.30

vim /haha.sh
#! /bin/bash
for IP in `cat ip.txt`
do
ping -c 3 -i 0.2 -W 3 &>/dev/null
if [ $? -eq 0 ]
then
echo "$IP is On-line"
else
echo "$IP is Off-line"
fi
done

linux就该这么学 第五课

相关推荐