shell练习题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell练习题相关的知识,希望对你有一定的参考价值。
练习一:写一个脚本
?????? 1.设定变量FILE的值为/etc/passwd
?????? 2.依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么
??????? 形如:(提示:LINE=wc -l /etc/passwd | cut -d" " -f1
)
???????? Hello,root,your UID is 0.
?????? 3.统计一个有多少个用户
???? 答案一:
#!/bin/bash
FILE="/etc/passwd"
awk -F: ‘{print "Hello",$1",your UID is" $3"."}END{print NR}‘ $FILE
练习二:写一个脚本
????? 1.切换工作目录至/var
????? 2.依次向/var目录中的每个文件或子目录问好,形如:
??????? (提示:for FILE in /var/;或for FILE in ls /var
;)
??????? Hello,log
????? 3.统计/var目录下共有多个文件,并显示出来
? 答案:
#!/bin/bash
b=cat 1.txt | wc -l
ls /var/ > 1.txt
sed -i "^$" /1.txt
for i in cat 1.txt
do
echo $i
done
echo 总共有$b个文件
练习三:写一个脚本
????? 1.设定变量file的值为/etc/passwd
????? 2.使用循环读取文件/etc/passwd的第2,4,6,10,13,15行,并显示其内容
????? 3.把这些行保存至/tmp/mypasswd文件中
? 答案:
#!/bin/bash
file="/etc/passwd"
for i in 2 4 6 10 13 15
do
sed -n "$i p" $file >> /tmp/mypasswd
done
练习四:写一个脚本
???????传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商
????????答案如下:
#!/bin/bash
read -p "请输入一个整数:" o
read -p "请输入一个整数:" p
expr $o + $p
expr $o - $p
expr $o / $p
expr $o % $p
echo $[a*p]
作业一:写一个脚本:
?????? 1.创建目录/tmp/scripts
?????? 2.切换工作目录至此目录中
?????? 3.复制/etc/pam.d目录至当前目录,并重命名为test
???????4.将当前目录的test及其里面的文件和子目录的属主改为redhat
?????? 5.将test及其子目录中的文件的其它用户的权限改为没有任何权限
???答案:
#!/bin/bash
mkdir /tmp/scripts
cd /tmp/scripts
cp /etc/pam.d /tmp/scripts/test
groupadd redhat
chown redhat: /tmp/scripts/test
chmod 4770 /tmp/scripts/test
作业二:写一个脚本
?????? 1.显示当前系统日期和时间,而后创建目录/tmp/lstest
???????2.切换工作目录至/tmp/lstest
?????? 3.创建目录a1d,b56e,6test
?????? 4.创建空文件xy,x2y,732
?????? 5.列出当前目录下以a,x或者6开头的文件或目录
?????? 6.列出当前目录下以字母开头,后跟一个任意数字,而后跟任意长度字符的文件或目录
???答案:
?????
#!/bin/bash
echo "北京时间:date
"
cd /tmp/lstest
mkdir ald b56e 6test
touch xy x2y 732
ls [ax6]
ls [a-Z][0-9]
???? ???????
作业三:写一个脚本
??????? 添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加
? 答案:
#!/bin/bash
for i in {1..10}
do
useradd user$i
done
??????
作业四:写一个脚本
?????? 通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线
?????? 如果在线,就显示“ip is up”
?????? 如果不在线,就显示“ip is down”
??????答案:
#!/bin/bash
for i in {151..254}
do
ping -c2 -w1 -i 0.1 $i &> /dev/null
if [ $? -eq 0 ];then
echo $i ip is up
else
echo $i ip is down
fi
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
o=0
for i in seq 100
do
o=$[o+i]
done
echo $o
00
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 /
for i in seq 4
do
o="m$i"
mkdir $o
y=".txt"
tx="$o$y"
cp $tx $o
done
3、(基训十二) 编写一个名为myfirstshell.sh的脚本,它包括以下内容。a) 包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的。
b) 问候用户。
c) 显示日期和时间。
d) 显示这个月的日历。
e) 显示您的机器名。
f) 显示当前这个操作系统的名称和版本。
g) 显示父目录中的所有文件的列表。
h) 显示root正在运行的所有进程。
i) 显示变量TERM、PATH和HOME的值。
j) 显示磁盘使用情况。
k) 用id命令打印出您的组ID。
m) 跟用户说“Good bye”
#!/bin/bash
echo hello $USER
echo 现在的日期是date
cal
echo 您的机器名为cat /etc/hostname
echo 当前的系统名称和版本为 cat /etc/redhat-release
ls -a /*
ps -a
echo $TERM
echo $PATH
echo $HOME
df
ID:’id-g’
echo "Good bye"
4、(基训十三) 设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限为 rwxr-xr—
#!/bin/bash
for i in {1..50}
do
mkdir user$i
chmod o=r user$i
done
5、(基训十四) 编写shell程序,实现自动删除50个用户账号的功能。账号名为stud1至stud50。
#!/bin/bash
for i in {1..50}
do
userdel stud$i
done
6、(基训十四) 设计一个shell程序,备份并压缩/etc目录的所有内容,存放在/root/bak目录: 里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。
#!/bin/bash
tar jcPf date +%Y-%M-%d
_etc /etc/
7、(基训十四) 某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
(1)在下午4 :50删除/abc目录下的全部子目录和全部文件;
(2)下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;
(3)在下午5:55将IDE接口的第二个逻辑分区卸载。
#!/bin/bash
rm -rf /abc/*
Vim ern.sh
#!/bin/bash
tar jcPf date +%Y-%M-%d
backup.tar.gz /data/
umount /dev/hda6
==========================================================
设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。
程序实现及注释如下:
#利用 test命令 [ -d /userdata ]:判断/userdata是否存在,如果存在直接创建子目录,不#存在先创建/userdata再创建子目录。
#根据题目的意思:/userdata/user$i应该是具有754权限,所以利用chmod赋权限。
vim test.sh
#!/bin/bash
for i in {1..50}
do
[ -d /userdata ] && mkdir /userdata/user$i || mkdir /userdata
chmod 754 /userdata
done
2.写一个脚本,检测用户输入串的合法性, 要求串由大小写字母、数字组成,无标点、特殊符号、空格。
思路:将输入的串中 非字母数字的内容删除或替换为空后若和原来输入的相同则合法,否则不合法。
注: 1.关于引用变量时是否需要双引号的说明
如果只是输出,可以不用双引号
如果变量值代的内容中无空格,表达,特殊符号,在引用时可以不需要双引号,反之,最好带双引号,否则在变量处理时很有可
能会出现“参数过多”等莫名其妙的错误信息。
2.关于匹配处理,sed是单行编辑程序。 sed ‘s/str1/str2/g’ file 将文件file中每行内str1替换为str2
[[:alnum:]]表示所有字母和数字中的任一个字符。若只是[:alnum:]则表示 方括号中的任一个字符。
[^[:alnum:]] 表除了所有字母数字外的任一字符。
#!/bin/bash
queding="echo $1 | sed ‘s/[^[:alnum:]]//g‘
"
if [ $1 == $queding ];then
echo 对了
else
echo 错了
fi
以上是关于shell练习题的主要内容,如果未能解决你的问题,请参考以下文章
Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段