第一题

    写一个脚本,完成以下功能:

     1 、提示用户输入一个用户名:

     2、显示一个菜单给用户,形如:

      U|u   show UID

      G|g   show GID

      S|s   show SHELL

      Q|q   quit

     3、提醒用户选择一个选项,并显示所选择的内容;如果用户给的是一个非上述所提示的选项,则提醒用户给出的选项错误,并请其重新选择后执行;

#!/bin/bash

#

read -p "Enter a user name:" USER

echo -e "U|u show UID\nG|g show GID\nS|s show SHELL\nquit"

read -p "Enter a word:" WORD

 WORD=`echo "$WORD"| tr 'a-z' 'A-Z'`

 until [ "$WORD" = U -o "$WORD" = G -o "$WORD" = S -o "$WORD" = Q ]; do

      read -p "Enter a word again:" WORD

  done

  UID1=`grep "^\$USER\>" /etc/passwd | cut -d: -f3`

  GID1=`grep "^\$USER\>" /etc/passwd | cut -d: -f4`

  SHELL1=`grep "^\$USER\>" /etc/passwd | cut -d: -f7`

 

if [ "$WORD" = U ]; then

     echo $UID1 

  elif [ "$WORD" = G ]; then

     echo $GID1

  elif [ "$WORD" = S ]; then

            echo $SHELL1

  elif [ "$WORD" = Q ]; then

     echo "quit"

fi

 

第二题

  写一个脚本:

     1、判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户输入Q或者q 无视错误并退出,其他任何键通过vim打开这个指定的脚本;

     2、如果用户通过vim打开编辑后保存退出时仍然有错误,则重复第一步的内容;否则,就正常关闭退出。

#!/bin/bash

#

read -p "Press a shelname:" SHELNAME

 until bash -n $SHELNAME &> /dev/null;then

   read -p "Enter Q|q:" MyWORD

  if [ $MYWORD = Q -o $MYWORD = q ]; then

   exit 5 ;

  else 

    vim $SHELNAME

  fi

 done

 

第三题

     写一个脚本:

     1、要求用户从键盘输入一个用户名,判断此用户是否存在;如果存在,则返回此用户的默认shell;如果不存在,提醒用户不存在;

     2、判断完成以后不要退出脚本,而是继续提示N|n(next)用户输入其他用户名以做出下一个判断,而键入其他任意字符可以退出;

#!/bin/bash

#

   read -p "Enter a username:" USER

   SHELL2=` grep "^\$USER\>" /etc/passwd | cut -d: -f7`

   id $USER &> /dev/null && echo $SHELL2 || echo "The $USER is not."

 

  read -p "Enter N|n:" NEXT

  if [ $NEXT = N -o $NEXT = n ]; then

    read -p "Enter a username:" USER

    id $USER &> /dev/null && echo $SHELL2 || echo "The $USER is not."

   else

     echo "quit"

  fi   

 

 

第四题

 写一个脚本

     1、扫描192.168.0网段内的主机的在线状态,但需要提示用户输入一段IP地址范围,方式是指定起始IP和结束IP;显示结果形如:

The host 192.168.0.1 is UP.

The host 192.168.0.2 is DOWN.

    2、使用while循环实现;

    3、主机在线状态的输出结果既要显示在屏幕上,同时要求所有主机信息也保存一份至/tmp/host_state;

    4、分别显示指定范围内所有在线的主机总数和不在线的主机总数;

#!/bin/bash

#

read -p "Enter two number:" A B

until [ $A -le 254 -a $B -le 254 ];do

  read -p "Enter the numbers again:" A B

done

if [ $A -gt $B ]; then

  START=$B

  END=$A

 else

  START=$A

  END=$B

fi

 

IPA=192.168.0

while [ $START -le $END ];do

 

  if  ping -c1 -w1 $IPA.$START &> /dev/null; then

     echo "The host $IPA.$START is up." | tee -a  /tmp/host_state    

      let UP++

   else

     echo "The host $IPA.$START is down." | tee -a /tmp/host_state

      let DOWN++

  fi

  let START++

done

 

sed 's@.*down@#&@g' /tmp/host_state

echo -e "The down host is $DOWN\nThe up host is $UP." 

 

第五题

    写一个脚本:

     1、查看redhat用户是否登录了系统,如果登录了,就通知当前脚本执行者“redhat is logged on.”  否则,就睡眠4秒钟后在进行测试;直到其登录为止退出;   要求:使用until循环

#!/bin/bash

#

 until echo `who` |grep "redhat" &> /dev/null ;do

    sleep 5;

  done

  echo "redhat is logged on.";

 

第六题

  写一个脚本:

     1、向系统中添加20个用户,名字为linuxer1-linuxer20,密码分别为其用户名,要用while循环;

     2、要求:在添加每个用户之前事先判断用户是否存在,如果已经存在,则不再添加此用户;

     3、添加完成后,显示linuxer1-linuxer20每个用户名及对应的UID号码和GID号码,形如:

        stu1,UID: 1000, GID: 1000

 

#!/bin/bash

#

#

  declare -i LINUXER=1

 

  while [ $LINUXER -le 20 ];do

     if id linuxer$LINUXER &> /dev/null; then

        echo "The user linuxer$LINUXER is exist."

      else

         useradd linuxer$LINUXER &> /dev/null

        echo "Add user linuxer$LINUXER sucessfully."

        echo "linuxer$LINUXER" | passwd --stdin linuxer$LINUXER &> /dev/null

        echo "Set password for linuxer$LINUXER sucessfully."

     fi

   let LINUXER++

 done

 

for LINUXER in {1..20};do

   UID2=`grep "\<linuxer$LINUXER\>" /etc/passwd | cut -d: -f3`

   GID2=`grep "\<linuxer$LINUXER\>" /etc/passwd | cut -d: -f4`  

    

    echo "linuxer$LINUXER,UID:$UID2"

    echo "linuxer$LINUXER,GID:$GID2"

   let  LINUXER++

done

 unset LINUXER