有关脚本的总结:
例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