Shell 编程题.doc
例题:shell1.sh 显示日期和时间。#!/bin/bashecho “current time is date” /date要加反引号shell2.sh 显示文件名,并显示位置参数(执行时带一个参数)。($0是一个特殊的变量,它的内容是当前这个shell程序的文件名;$1是一个位置参数,位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。)#!/bin/bashecho “the program name is $0” /$0是一个特殊的变数echo “the first para is $1” /$1是一个位置参数echo “the program exit” /执行时带一个参数 如./shell2.sh abcdshell3.sh 判断并显示位置参数#!/bin/bashif -d “$1”;thenecho “$1 is directory ,existed”elseecho “$1 does not exist ,now create it”mkdir $1echo “$1 is created”fi /执行时带一个参数shell4.sh 问候用户 #!/bin/bashuser=whoami case $user inteacher)echo “hello teacher”;root)echo “hello root”;*)echo “hello $user,welcome”esac1、 求1+2+3+.+100的和是?#!/bin/bashSUM=0I=0while $I -le 100 do SUM=$(SUM+I) I=$(I+1)doneecho "由1+2+3+.+100的和是:$SUM"2、(基训十一) 在根目录下有四个文件m1.txt,m2.txt,m3.txt,m4.txt,用Shell编程,实现自动创建m1,m2,m3,m4四个目录,并将m1.txt,m2.txt,m3.txt,m4.txt四个文件分别拷贝到各自相应的目录下。#!/bin/bashcd /touch m1.txt m2.txt m3.txt m4.txtI=1 while $I -le 4 do mkdir m$I cp m$I.txt m$I I=$(I+1)done3、(基训十二) 编写一个名为myfirstshell.sh的脚本,它包括以下内容。a) 包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的。b) 问候用户。c) 显示日期和时间。d) 显示这个月的日历。e) 显示您的机器名。f) 显示当前这个操作系统的名称和版本。g) 显示父目录中的所有文件的列表。h) 显示root正在运行的所有进程。i) 显示变量TERM、PATH和HOME的值。j) 显示磁盘使用情况。k) 用id命令打印出您的组ID。m) 跟用户说“Good bye”#!/bin/bash# 09嵌入 5号 贾德进 myfirstshell.sh shell的简单编程user=whoamicase $user inroot)echo "hello root"teacher)echo "hello teacher"*)echo "hello $user,welcome"esacecho "日期和时间: date"echo "本月的日历: cal"echo "本机的机器名:uname -n"echo "当前这个操作系统的名称和版本:uname -s;uname -r"echo "父目录中的所有文件的列表:ls ./"echo "root正在运行的所有进程: ps -u root"echo "变数TERM的值:$TERM"echo "变数PATH的值:$PATH"echo "变数HOME的值:$HOME"echo "磁盘的使用情况:df"echo "用id命令打印出你的组ID:id -g"echo "Good bye!"4、(基训十三) 设计一个Shell程序,在/userdata目录下建立50个目录,即user1user50,并设置每个目录的权限为 rwxr-xr#!/bin/bashcd /userdataI=1while $I -le 50 do mkdir -p userdata/user$I chmod o-x user$I I=$(I+1)done5、(基训十四) 编写shell程序,实现自动删除50个用户账号的功能。账号名为stud1至stud50。#!/bin/bashcd /userdataI=1while $I -le 50 do mkdir -p userdata/user$I chmod o-x user$II=$(I+1)done6、(基训十四) 设计一个shell程序,备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。#!/bin/bashDIRNAME=ls |root|grep bak if -z $DIRNAME ; then mkdir /root/bak cd /root/bakfiYY=date + %yMM=date + %mDD=date + %dtar czvf $YY$MM$DD_etc.gz /etcecho "etc bak finshied"7、(基训十四) 某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:(1)在下午4 :50删除/abc目录下的全部子目录和全部文件;(2)下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;(3)在下午5:55将IDE接口的第二个逻辑分区卸载。/ 采用: vi pram.cron#(1) 在下午4:50删除/abc目录下的全部子目录和全部文件;50 16 * rm -rf /abc/*#(2) 下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;50 17 * tar czvf back.tar.gz /data#(3) 在下午5:55将IDE接口的第二个逻辑分区卸载.55 17 * umount /dev/hda6/ 执行:crontab pram.cron