题目要求:有文本文件student.txt,该文件是所有学生的信息,每个学生存储一行信息,信息格式如下:学号:姓名:性别:专业 如(101:张三:男:计算机)设计一个shell,名称为student.sh,该shell完成如下功能:1)当输入 student.sh -a 101:张三:男:计算机 时,首先判断101记录是否存在,如果不存在,则把该信息写入文件,如果存在,则给出提示,并输出文件中学号为101的该行信息2)当输入 student.sh -d 101 时,首先判断101记录是否存在,如果不存在,给出提示,如果存在,则提示用户确认是否要删除记录,如用户输入y或者yes,则删除文件中学号为101的该行信息,如果用户输入n或no时,则不做删除操作3)当输入 student.sh -s 101 时,首先判断101记录是否存在,如果不存在,给出提示,如果存在,则输出文件中学号为101的该行信息4)当输入 student.sh时,输出文件的全部内容5)当用户输入的选项不正确时,给出错误提示,并输入该shell的用法,如(student.sh -q 123456)
#!/bin/bashWarning() { echo -e "usage:`basename $0`\n" echo " -d Delete data." echo " -a Insert data." echo " -s Query data." echo " `basename $0` show all." echo}DIR=/root/shell/dataDATA=students.dataXUEHAO="Sno"XINGMING="Sname"XINGBIE="Sex"ZHUANYE="Major"cd $DIRif [ "$#" -eq 0 ] ;then printf "%-6s\t%-12s\t%-6s\t%-s\n" $XUEHAO $XINGMING $XINGBIE $ZHUANYE echo cat $DATA | awk -F: '{printf("%-6s\t%-12s\t%-6s\t%-s\n",$1,$2,$3,$4)}' exitficase $1 in -a) if ! grep -q "$2" $DATA 2>&1 ;then echo "$2" >> students.data exit else printf "%-6s\t%-12s\t%-6s\t%-s\n" $XUEHAO $XINGMING $XINGBIE $ZHUANYE echo echo $2 | awk -F: '{printf("%-6s\t%-12s\t%-6s\t%-s\n",$1,$2,$3,$4)}' fi ;;-d) if ! grep "$2" $DATA >/dev/null 2>&1 ;then echo "The record doesn't exist." exit else read -p "Do you want to delete the record?(yes/y/no/n)" answer if [ "$answer" = "y" -o "$answer" = "yes" ] ;then sed -e '/$2/d' > students.data 2>&1 elif [ "$answer" = "no" -o "$answer" = "n" ] ;then echo "Canceled.." else echo "You can only input yes/y/no/n" fi fi ;;-s) if ! grep -q "$2" $DATA 2>&1 ;then echo "The record doesn't exist." else printf "%-6s\t%-12s\t%-6s\t%-s\n" $XUEHAO $XINGMING $XINGBIE $ZHUANYE sed -n -e '/$2/p' $DATA | awk -F: '{printf("%-6s\t%-12s\t%-6s\t%-s\n",$1,$2,$3,$4)}' fi ;;*) Warning ;;esac