shell脚本练习题 下载本文

shell脚本例子集锦(习题总结)

练习一:写一个脚本

1.设定变量FILE的值为/etc/passwd

2.依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么 形如:(提示:LINE=`wc -l /etc/passwd | cut -d\ Hello,root,your UID is 0. 3.统计一个有多少个用户 答案一:#!/bin/bash

file=\

LINES=`wc -l $file | cut -d\ for I in `seq 1 $LINES`;do

userid=`head -$I $file | tail -1 |cut -d: -f3` username=`head -$I $file | tail -1 |cut -d: -f1` echo \ done

echo \ 答案二:#!/bin/bash file=/etc/passwd let num=0

for I in `cat $file`;do

username=`echo \ userid=`echo \

echo \ num=$[$num+1] done

echo \练习二:写一个脚本

1.切换工作目录至/var

2.依次向/var目录中的每个文件或子目录问好,形如:

(提示:for FILE in /var/*;或for FILE in `ls /var`;) Hello,log

3.统计/var目录下共有多个文件,并显示出来 答案:#!/bin/bash cd /var let num=0

for I in `ls /var/*`;do echo \ num=$[$num+1] done

echo \练习三:写一个脚本

1.设定变量file的值为/etc/passwd

2.使用循环读取文件/etc/passwd的第2,4,6,10,13,15行,并显示其内容

3.把这些行保存至/tmp/mypasswd文件中 答案:#!/bin/bash

file=\

for I in 2 4 6 10 13 15;do exec 3>/tmp/mypasswd

line=`head -$I $file | tail -1` echo \ echo \ exec 3>&- done

练习四:写一个脚本

传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商

答案如下:vim test.sh #!/bin/bash

echo \(表示输出第一个数) echo \(表示输出第二个数) echo \(输出两数之和) echo \(输出两数之差) echo \(输出两数之积) echo \(输出两数之商)

:wq (表示保存并退出vi编辑器) chmod +x test.sh (给test.sh执行的权限) ./test.sh 2 3 (传递两个参数并执行脚本

作业一:写一个脚本:

1.创建目录/tmp/scripts 2.切换工作目录至此目录中

3.复制/etc/pam.d目录至当前目录,并重命名为test

4.将当前目录的test及其里面的文件和子目录的属主改为redhat 5.将test及其子目录中的文件的其它用户的权限改为没有任何权限 答案:

#!/bin/bash

mkdir -v /tmp/scripts cd /tmp/scripts

cp -r /etc/pam.d ./test chown -R redhat ./test chmod -R o=--- ./test 作业二:写一个脚本

1.显示当前系统日期和时间,而后创建目录/tmp/lstest 2.切换工作目录至/tmp/lstest 3.创建目录a1d,b56e,6test

4.创建空文件xy,x2y,732

5.列出当前目录下以a,x或者6开头的文件或目录

6.列出当前目录下以字母开头,后跟一个任意数字,而后跟任意长度字符的文件或目录 答案:

#!/bin/bash date

mkdir -pv /tmp/lstest cd /tmp/lstest

mkdir a1d b56e 6test touch xy x2y 732 ls [ax6]*

ls [[:alpha:]][[:digit:]]*

作业三:写一个脚本

添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加

答案:

#!/bin/bash

for I in `seq 1 10`;do

cut -d: -f1 /etc/passwd |grep \2>>/tmp/etc.err || useradd user$I

done

作业四:写一个脚本

通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线

如果在线,就显示“ip is up” 如果不在线,就显示“ip is down” 答案: #!/bin/bash

for I in `seq 151 254`;do ping -c1 -w1 192.168.0.$I &>/dev/null && echo \is up\|| echo \ done

例题:

shell1.sh 显示日期和时间。

#!/bin/bash

echo “current time is `date`” //date要加反引号

shell2.sh 显示文件名,并显示位置参数(执行时带一个参数)。(①$0

是一个特殊的变量,它的内容是当前这个shell程序的文件名;②$1是一个位置参数,位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。)

#!/bin/bash

echo “the program name is $0” //$0是一个特殊的变数 echo “the first para is $1” //$1是一个位置参数

echo “the program exit” //执行时带一个参数 如./shell2.sh abcd

shell3.sh 判断并显示位置参数

#!/bin/bash if [ -d “$1”];then

echo “$1 is directory ,existed” else

echo “$1 does not exist ,now create it” mkdir $1

echo “$1 is created”

fi //执行时带一个参数

shell4.sh 问候用户

#!/bin/bash

user=`whoami` case $user in teacher) echo “hello teacher”;; root) echo “hello root”;; *) echo “hello $user,welcome” esac

1、 求1+2+3+...+100的和是?

#!/bin/bash SUM=0

I=0

while [ $I -le 100 ] do

SUM=$((SUM+I)) I=$((I+1)) done

echo \由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/bash cd /

touch m1.txt m2.txt m3.txt m4.txt I=1

while [ $I -le 4 ] do

mkdir m$I cp m$I.txt m$I I=$((I+1)) done

3、(基训十二) 编写一个名为myfirstshell.sh的脚本,它包括以下内容。a) 包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的。

b) 问候用户。 c) 显示日期和时间。 d) 显示这个月的日历。 e) 显示您的机器名。

f) 显示当前这个操作系统的名称和版本。 g) 显示父目录中的所有文件的列表。