`
zfy421
  • 浏览: 230266 次
社区版块
存档分类
最新评论

shell练习题

阅读更多

建立stu.txt内容:

 

100:张三:男:计算机
101:张红:女:文秘
102:张飞:男:体育
103:张婷:女:英语
104:张海洋:男:机电

 题目要求:有文本文件stu.txt,该文件是所有学生的信息,每个学生存储一行信息,信息格式如下:学号:姓名:性别:专业    如(100:张三:男:计算机)设计一个shell,名称为stu.sh,该shell完成如下功能:

1)当输入stu.sh时,列出所有记录内容

2)当输入 stu.sh -a 100:张三:男:计算机    时,首先判断100记录是否存在,如果不存在,则把该信息写入文件,如果存在,则给出提示,并输出文件中学号为100的该行信息

3)当输入 stu.sh -d 100时,首先判断100记录是否存在,如果不存在,给出提示,如果存在,则提示用户确认是否要删除记录,如用户输入y或者yes,则删除文件中学号为100的该行信息,如果用户输入n或no时,则不做删除操作

4)当输入 stu.sh -s 100时,首先判断100记录是否存在,如果不存在,给出提示,如果存在,则输出文件中学号为100的该行信息

5)当用户输入的选项不正确时,给出错误提示,并输入该shell的用法

 

data="stu.txt";
sid="学号";
sname="姓名";
ssex="性别";
smajor="专业";

help(){
  echo "不加参数,显示所有记录";
  echo "-a 添加记录";
  echo "-d 删除记录";
  echo "-s 搜索记录";
}

if [ $# -eq 0  ];
then
  printf "%-s\t%-s\t%-s\t%-s\n" $sid $sname $ssex $smajor;
  #cat $data |awk -F ":" '{printf("%-s\t%-s\t%-s\t%-s\n",$1,$2,$3,$4);}';二选一
  cat $data|tr ':' '\t';
  exit;
fi

case $1 in 
-a)
  if ! grep -q $2 $data 2>&1;
  then
        echo $2>>$data;
        exit;
  else
        echo "存在";
        printf "%-s\t%-s\t%-s\t%-s\n" $sid $sname $ssex $smajor;
        echo $2|tr ':' '\t';
  fi
;;
-d)
  if ! grep -q $2 $data 2>&1;
  then
        echo "记录不存在。。";
        exit;
  else
        read -p "确定要删除?(y/n)" confirm;
        if [ $confirm == "y" -o $confirm == "yes" ];
        then
                sed -i "/$2/d" $data 2>&1;
        elif [ $confirm == "n" -o $confirm == "no" ];
        then
                echo "用户取消";
        else
                echo "错误的输入";
        fi
  fi
;;
-s)
  if ! grep -q $2 $data 2>&1;
  then
        echo "记录不存在。。";
        exit;
  else
        printf "%-s\t%-s\t%-s\t%-s\n" $sid $sname $ssex $smajor;
        #sed -n "/$2/p" $data |tr ':' '\t';
        grep $2 $data|tr ':' '\t';
  fi
;;
*)
  help
;;
esac

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics