Linux下Shell编程问题

题目要求:有文本文件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)
最新回答
冷巷。

2024-05-18 05:56:50

#!/bin/bash

Warning() {

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/data
DATA=students.data
XUEHAO="Sno"
XINGMING="Sname"
XINGBIE="Sex"
ZHUANYE="Major"

cd $DIR
if [ "$#" -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)}'
exit
fi

case $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
涟漪幽香

2024-05-18 10:10:30

又想马儿跑,又想马儿不吃草
风夏了白雪

2024-05-18 23:03:24

这么难的题,悬赏呢。。