有关脚本的总结:
例1、写一个脚本:
给定一个文件,相办法判断此文件是否存在;
如果存在,就统计出此文件中的空白行的行数,并显示出来;
否则,就说明此文件路径有错误;
答案:有两种方法:
第一种不用条件判断语句
#!/bin/bash //这是脚本编程中的首要条件
filename=rc.sysinit
path=/root/rc.sysinit //指定文件的名称以及路径
[ -e $path ] && echo `grep '^$' $filename | wc -l ` || echo `it's path is error`
//-e 是判断该文件路径是否存在,如果存在的话,用&&条件执行我们所要的结果,^$是指以空白开头空白结尾的行,即我们所要找的空白行,然后用wc命令统计出来行数,即是我们要的结果。
第二种方法:用if判断语句传递参数的方法(这个方法相对简单些)
#!/bin/bash //开头
MYFILE=$1 // 定义一个MYFILE 以参数$1 的方式传递给MYFILE
If [ -e $MYFILE ] ;then // 用if语句判断是否有这个文件的路径
echo “ Total space line is :` grep ‘^$’ $MYFILE | wc –l`” //满足条件后执行我们所要的结果 ,并显示到屏幕上反引号加命令可以直接输出这段命令所要的结果
else
echo “No such file : $MYFILE” //不满足条件时即显示没有该文件
fi // if语句的结尾
例2、写一个脚本:
判断文件/etc/inittab文件中,是否有某一行中某个数字曾出现过至少三次;
如果有,显示这样的行共有多少个;
否则,显示没有这样的行;
答案:
在bash中是无法精确锚定数字的,所以这道题目只要找出一行中一个数字出现过3 次就可以
#!/bin/bash
#
if ! [ -f /etc/inittab ] ;then
echo "No such file ."
exit 5
fi //如果给出的是一个文件的时候,首先判断该文件是否存在,不存在的话就不能向下执行了
if grep '\([0-9]\).*\1.*\1' /etc/inittab &> /dev/null ;then //使用分组来找出一行中有3个相同数字的行,结果不要
echo "Total line :`grep '\([0-9]\).*\1.*\1' | wc -l`." // 统计出来一共有多少这样的行,显示出来
else
echo "No such line."
fi
例3、写一个脚本:
判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor_id一行中。
如果其生产商为AuthenticAMD,就显示其为AMD公司;
如果其生产商为GenuineIntel,就显示其为Intel公司;
否则,就说其为非主流公司;
答案:
#!/bin/bash
#
vendor=`grep 'vendor_id' /proc/cpuinfo | cut -d: -f2 | sort -u | tr -d ' '` //定义变量为vendor 找出我们题目所要的结果:其中sort是去掉相同的行,tr是去掉前面的空白字符
if [ "$vendor" == 'AuthenticAMD' ] ;then //字符串的比较
echo "vendor_id is AMD" //输出结果
elif [ "$vendor" == 'GenuineIntel' ] ;then //第二次字符串的比较
echo "vendor_id is Intel" //输出结果
else
echo "it is not man company"
fi
例4、写一个脚本:
给脚本传递三个整数,判断其中的最大数和最小数,并显示出来
答案:
我们先用一种比较笨的方法:
#!/bin/bash
#
if [ $1 -ge $2 ] ;then //首先传递3个参数给脚本,参数一和参数二进行比较
max=$1 //把其中较大的参数赋值给变量max
else
max=$2
fi
if [ $1 -ge $3 ] ;then
max=$1
else
max=$3
fi //拿参数一和参数三进行比较,大的赋值给变量max
if [ $2 -ge $max ] ;then
echo "The max is $2"
else
echo "The max is $max"
fi //以上面两次比较的结果的最大值拿来和第二个参数再相比,就得出我们所求的最大值的结果
//下面是最小值的比较,同最大值的比较相同得出最小值
if [ $1 -le $2 ] ;then
min=$1
else
min=$2
fi
if [ $1 -le $3 ] ;then
min=$1
else
min=$3
fi
if [ $3 -le $min ] ;then
echo "The min is $3"
else
echo "The min is $min"
fi
第二种方法,第一种方法相对比较繁琐,下面提供一种比较简单的嵌套格式的if语句
#!/bin/bash
#
if [ $1 -ge $2 ] ;then //首先用第一个参数和第二个参数比较,得出较大的那个数
if [ $1 -ge $3 ];then //再在它的基础上和第三个参数比较,就很轻易得出三个数中较大的那个了
echo "The max is $1."
fi
else
echo "The max is $3"
fi
if [ $1 -le $2 ] ;then
if [ $1 -le $3 ];then
echo "The min is $1."
fi
else
echo "The min is $3."
fi //比较最小的数的过程和最大数的过程是一样的
例5、
写一个脚本:
传递一个用户名给脚本
计算此用户上次修改密码至今已经过去多少天:如果小于两天,就告诉用户不能修改密码;
如果超出两天,就告诉用户,密码正常使用中,但可以再次修改密码了;
如果超出60天,就告诉用户该修改密码了。
答案:
易忽略的点:先判断用户名是否存在
#!/bin/bash
#
if ! id $1 &> /dev/null;then
echo "no such user."
exit 4 //这个是要放在if语句里面的,我犯的错误就是放在了外面,然后下面的就直接无法执行了
fi //以上是判断该用户名是的存在的步骤
CHDAY=`grep "^$1:" /etc/shadow | cut -d: -f3` //在/etc/dhadow第三个字段里提取出从1970年到修改密码的时间
TODAY=`date +%s` //这是1970年到现在的时间(以秒计算的)
DAYS=$[$TODAY/86400] //将秒数换算成天数
TDAY=$[$DAYS-$CHDAY] //从修改密码到现在的时间
if [ $TDAY -le 2 ]; then
echo "passwd can't change."
elif [ $TDAY -gt 2 -a $TDAY -le 60 ] ;then
echo "you can change the passwd."
elif [ $TDAY -ge 60 ];then
echo "you should change the passwd."
else
echo "passwd use regully."
fi
本文出自 “每一步都是新的起点!^_^” 博客,转载请与作者联系!