Shell练习题1-6

一、

1、编写hello world脚本

2、编写一个脚本用于创建Linux账号并设置密码,带参数形式
#!/bin/bash
useradd $1
echo $2 | passwd --stdin $1

3、判断用户是否是root管理员,是的话安装http服务
if [ $USER == root ],then
  yum -y install httpd
else
  echo '您权限不足'
fi

4、编写一个脚本用户创建Linux账户,提示用户输入用户名和密码。要求输入密码时屏蔽输出。
#!/bin/bash
read -p '请输入您的大名: ' a
id $a &> /dev/null
if [ $? -eq 0 ];then
while [ $? -eq 0 ]
do
read -p '请输重新输入您的大名: ' a
done
else
   useradd $a &> /dev/null
   stty -echo 
   read -p '请输设置您的密码: ' b 
   echo $b | passwd --stdin $a 
   stty  echo
   echo $a"账户创建完成,请记住您的账户和密码"
fi


5、编写一个脚本,附带3个参数(整数),根据大小排序输出

6、测试某个网段的主机哪些开机,哪些关机
提示:使用ping命令

7、批量修改文件名,将当前路径下所有为.txt结尾的改为.doc

8、对1到100的数字进行求和
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二、

1.写一个脚本,一键完成yum源配置
 1)删除/etc/yum.repo.d下的文件
 2) 创建一个叫local.repo的文件并写入配置信息

2.写一个脚本,要求实现:一键安装NFS服务,并创建一个文件夹较public,将其作为一个共享文件
#!/bin/bash
rpm -q nfs-utils &> /dev/null
if [ $? -eq 0 ];then
   mkdir /public  &> /dev/null
   echo "/public  *(ro)" > /etc/exports
   systemctl restart nfs-server
   echo "nfs-utils已安装,仅创建/public共享目录"
else
   yum -y install nfs-utils
   mkdir /public
   echo "/public  *(ro)" > /etc/exports
   systemctl restart nfs-server
   echo "nfs-utils安装成功,并创建/public共享目录"
fi


3.使用for循环打印一下图片
提示:使用双层循环
使用c语言风格的for循环
for((i=0;i<=9;i++))

1                 *
22                **
333               ***
4444              ****
55555             *****
666666            ******
7777777           *****  
88888888          ****
999999999         ***
                   ** 
                   *
for ((i=1;i<=9;i++))
   do
     for((j=1;j<=i;j++))
      do
        echo -n "*"
      done
 echo
done
for  ((i=8;i>=1;i--))
do
   for ((i=8;i>=1;i--))
   do
       for((j=1;j<=i;j++))
       do
         echo -n "*"
       done
echo
   done
done

4.写一个脚本,判断一个年份是否闰年
提示:满足下列条件的年份为闰年
1)被4整除并且能被100整除的年份
2)能被400整除的年    


5.写一个脚本,提示输入路径,删除该路径下大小为0的文件(比如目录/mnt)
提示:使用find 命令
#!/bin/bash
read -p "请输入路径:" x
find $x  -type f  -size 0 -exec rm -rf  {}  \;
6.写一个脚本,自动对磁盘分区,格式化,并挂载
提示:使用fdisk的非交互模式  fdisk /dev/vda << EOF

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

三、1.生成一个随机8位的密码,密码的挑选范围包括:所有字母(大小写),数字,符号(*&.@$)
提示:使用字符串切割来实现

2.统计某个目录下有多少个文件,比如,统计/var/log下的文件数量
#提示 if [ -f 文件名 ] 判断是否为文件


3.简易切换防火墙,比如创建了一个脚本qiehuanF.sh, 
执行脚本:source qiehuanF.sh block ,即可切换到block模式
提示:使用case判断

4.循环关闭局域网中所有的主机,比如176.130.9.0/24 (9是本教室,要试验请选择1-20除9以外)
提示:ssh ip poweroff

5.有一串数字: 0 1 1 2 3 5 8 13 21 34 ... ...
这串数字满足这样的规律: 后一个数字永远是前两个数字只和
写一个脚本,列出第100个数字之前的序列
提示:利用数组 , list=(0 1)


6.模仿clone-vm7,编写一个一键生成虚拟机的脚本

7.自选题,如果你能活着到这,请用脚本一键实现:PXE自动装机部署(除了kickstart需要手动配置)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

四、

正则表达式练习 
1,过滤包含the关键字 
2,过滤不包含the关键字 
3,过滤不论大小写the关键字 
4,过滤test或taste这两个单字 
5,过滤有oo的字节 
6,过滤不想要oo前面有g的 
7,过滤oo前面不想有小写字节 
8,过滤有数字的那一行 
9,过滤以the开头的 
10,过滤以小写字母开头的 
11,过滤开头不是英文字母 
12,过滤行尾结束为小数点.那一行 
13,过滤空白行 
14,过滤出g??d的字串 
15,过滤至少两个o以上的字串 
16,过滤g开头和g结尾但是两个g之间仅存在至少一个o 
17,过滤两个o的字串 
18,过滤g后面接2到5个o,然后在接一个g的字串 
19,过滤g后面接2个以上o的 
 
 1,grep -n 'the' regular_express.txt

 2,grep -vn 'the' regular_express.txt

3,grep -in 'the' regular_express.txt

4,grep -n 't[ae]st' regular_express.txt  

5,grep -n 'oo' regular_express.txt  

6,grep -n '[^g]oo' regular_express.txt

7,grep -n '[^a-z]oo' regular_express.txt

8,grep -n '[0-9]' regular_express.txt

9,grep -n '^the' regular_express.txt

10,grep -n '^[a-z]' regular_express.txt

11,grep -n '^[^a-zA-Z]' regular_express.txt  

12,grep -n '\.$' regular_express.txt

13,grep -n '^$' regular_express.txt

14,grep -n 'g..d' regular_express.txt

15,grep -n 'ooo*' regular_express.txt

16,grep -n 'goo*g' regular_express.txt

17,grep -n 'o\{2\}' regular_express.txt

18,grep -n 'go\{2,5\}g' regular_express.txt

19,grep -n 'go\{2,\}g' regular_express.txt

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

五、

假设我们有这样一个待处理的文件grade.txt,内容如下: 
M.Tansley  05/99  48311  Green  8  40  44 J.Lulu   06/99  48317  green  9  24  26 P.Bunny  02/99  48   Yellow    12  35  28 J.Troll   07/99  4842  Brown-3 12  26  26 L.Tansley  05/99  4712  Brown-2 12  30  28 题目1:打印整个文件 
题目2:打印第一和第四个列 
题目3:打印表头Name   Belt,然后显示文档第一列和第四列 
题目4:打印第四列包含Brown的行 
题目5:打印第三列包含48的行 
题目6:显示第三列是48的行 
题目7:显示第七列不超过40的行 
题目8:打印第四列不是Brown-2的行 
题目9:当第六列大于第七列时,显示:$6 大于 $7 
题目10:当第一列的第四个字符是a时,显示该行 
题目11:显示包含Yellow或Brown的行 (提示:$0表示所有列) 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 题目1:参考答案: 
 awk '{print}' grade.txt 
题目2:参考答案 
 awk '{print $1,$4}' grade.txt 
题目3:参考答案 
 awk 'BEGIN {print "Name\tBelt"}{print $1"\t"$4}' grade.txt 
题目4:参考答案 
 awk '$4~/Brown/ {print}' grade.txt 
题目5:参考答案 
 awk '$3 ~/48/ {print}' grade.txt 
题目6:参考答案 
 awk '$3=="48" {print}' grade.txt 
 题目7:参考答案 
 awk '$7<=40' grade.txt 
 题目8:参考答案 
 awk '$4 != "Brown-2" {print}' grade.txt 
  题目9:参考答案 
 awk '$6 > $7 {print $6,"大于",$7}' grade.txt 
 题目10:参考答案 
 awk '$1 ~/^...a/' grade.txt 
 题目11:参考答案 
 awk '$0 ~/Yellow|Brown/' grade.txt 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


 六、

在文本/var/ftp/pub/data.txt用sed或awk查询:
题目 1:显示包含 San 的行
sed -n '/San/p' /var/ftp/pub/data.txt
awk '/San/' /var/ftp/pub/data.txt
题目 2:显示以 J 开头的人名所在的行
sed -n '/^J/p' /var/ftp/pub/data.txt
awk  '/^J/' /var/ftp/pub/data.txt
题目 3:显示 700 结尾的行
sed -n '/700$/p' /var/ftp/pub/data.txt
awk  '/700$/' /var/ftp/pub/data.txt
题目 4:显示不包 834 的行
sed -n '/[^834]/ p' /var/ftp/pub/data.txt
awk  '/[^834]/ ' /var/ftp/pub/data.txt
题目 5:显示电话号码的区号为 834 的行
sed -n '/834-/ p' /var/ftp/pub/data.txt
awk '/834-/' /var/ftp/pub/data.txt
题目 6:显示这样的行:它包含一个大写字后跟四个小写字母,逗号,空格,和一个
大写字母
sed -n  '/[A-Z][a-z]\{4\}, [A-Z]/p' /var/ftp/pub/data.txt
sed -rn  '/[A-Z][a-z]{4}, [A-Z]/p' /var/ftp/pub/data.txt
题目 7:显示以 K 或 k 开头的行
sed -n '/^[kK]/p' /var/ftp/pub/data.txt
awk '/^[kK]/' /var/ftp/pub/data.txt
题目 8:显示工资为六位数的行
sed -rn '/[0-9]{6}/p'  /var/ftp/pub/data.txt
awk '/[0-9]{6}/'  /var/ftp/pub/data.txt
题目 9:显示包括 Lincoln 或 lincoln 的行
sed -n '/[lL]incoln/p' /var/ftp/pub/data.txt
题目 10:把 Jon 的名字改成 Jonathan
sed -n 's/Jon/Jonathan/p' /var/ftp/pub/data.txt
题目 11:删除文件头 3 行内容
sed  '1,3d' /var/ftp/pub/data.txt
题目 12:显示 5-10 行
sed -n '5,10p' /var/ftp/pub/data.txt
题目 13:把三个星***添加到有 Fred 开头的行尾
sed -n 's/^Fred/***/p' /var/ftp/pub/data.txt
题目 14:删除空白行

sed '/^$/d' /var/ftp/pub/data.txt

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

题目1:显示包含San的行 
题目2:显示以J开头的人名所在的行 
题目3:显示700结尾的行 
题目4:显示不包834的行 
题目5:显示电话号码的区号为834的行 
题目6:显示这样的行:它包含一个大写字后跟四个小写字母,逗号,空格,和一个
大写字母 
题目7:显示以K或k开头的行 
题目8:显示工资为六位数的行 
题目9:显示包括Lincoln或lincoln的行 
题目10:把Jon的名字改成Jonathan 
题目11:删除文件头3行内容 
题目12:显示5-10行 
题目13:把三个星***添加到有Fred开头的行尾 
题目14:删除空白行 
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
题目1:参考答案: 
#sed -n‘/San/p’ datafile 
题目2:参考答案: 
#sed -n ‘/^J/p’ datafile 
题目3:参考答案: 
#sed -n ‘/700$/p’ datafile 
题目4:参考答案: 
#sed -n '/834/! p' datafile 
题目5:参考答案: 
#sed -n /:834-/p datafile 
题目6:参考答案: 
#sed -n '/[A-Z][a-z]\{4\}, [A-Z]/p' datafile 
题目7:参考答案: 
#sed -n '/^[Kk]/p' datafile 
题目8:参考答案: 
#sed -n '/:[0-9]\{6\}$/p' datafile 
题目9:参考答案: 
#sed -n '/[Ll]incoln/p' datafile 
题目10:参考答案: 
#sed -n s/Jon/Jonathan/p datafile  
题目11:参考答案: 
#sed 1,3d datafile 
题目12:参考答案: 
#sed -n 5,10p datafile 
题目13:参考答案: 
#sed -n /^Fred/s/$/***/p datafile 
题目14:参考答案: 
#sed '/^$/d' datafile 

发布了55 篇原创文章 · 获赞 0 · 访问量 405

猜你喜欢

转载自blog.csdn.net/weixin_45533230/article/details/104284344