项目 | 内容 |
---|---|
这个作业属于哪个课程 | 班级课程的主页链接 |
这个作业的要求在哪里 | 作业要求链接接地址 |
学号-姓名 | 17041511-陈涛 |
作业学习目标 | 1)了解shell脚本的概念及使用、2)掌握shell脚本语言的基本语法、3)学习简单的shell脚本编程 |
首先创建一个exp5文件夹
1、让用户输入一个字符串,如果用户输入的是hello
,请输入hello 用户姓名首字母缩写
,否则输出请输入hello
#主要代码 #!/bin/bash #shell脚本解释器路径 read -p '请输入一个字符串:' str #将输入值赋给str if [ $str = "hello" ] #判断str是否等于hello then echo "hello zsh" #str为hello则屏幕显示hellozsh else echo "请输入hello" #否则屏幕显示请输入hello fi
chmod +x #授予可执行权限
2、编写一脚本,判断输入用户名是否存在,输出结果只能是存在该用户或者不存在该用户,不能有其他数据输出。
#主要代码 #!/bin/bash read -p '请输入用户名:' user_name #输入值赋给user_name id $user_name &> /dev/null #id命令执行,判断用户是否存在,不显示输出结果 if [ $? -eq 0 ] #检查id命令是否成功 then #如果成功,执行echo命令输出“存在用户(所输入的用户名)” echo "存在用户$user_name" else #不成功,则执行echo命令输出“不存在用户” echo "不存在用户$user_name" fi
3、编写脚本计算1-100
之间的所有奇数和。
#主要代码 #!/bin/bash SUM=0 #初始化SUM,SUM赋0 for i in {1..100..2} #for循环中,循环变量i取自1-100中的奇数 do let SUM=$SUM+$i #SUM的值加上i赋予SUM done echo "1-100之间的所有奇数和为: $SUm" #输出结果
4、编写脚本,判断键盘输入整数是否为质数。
#主要代码 read -p '请输入一个正整数:'num #输入值赋给num [ $num -eq 1 ] && echo '$num是质数'&&exit #判断num是否等于1,等于则输出“num为质数”并结束 [ $num -eq 2 ] && echo '$num是质数'&&exit #判断num是否等于2,等于则输出“num为质数”并结束 for i in `seq 2 $[$num-1]` #for循环,循环变量i取2到num-1中的所有整数 do [ $[$num%i] -eq 0 ] && echo "$num不是质数"&&exit #判断num除以i取余数是否等于0,等于则执行echo语句 done echo "$num是质数"&&exit #循环结束则屏幕显示num是质数
5、模拟一个多任务维护界面,当执行程序时先显示总菜单,然后进行选择后做相应的维护监控操作
#主要代码 #!/bin/bash cat <<-EOF #获取stdin,并在EOF处结束stdin,输出stdout h 显示命令帮助 f 显示磁盘分区 d 显示磁盘挂载 m 查看内存使用 u 查看系统负载 q 退出程序 EOF while true do read -p "请输入需要操作的内容(help h):" action #输入赋给action case $action in #用case语句,根据action的值,输出相应的内容 h) cat <<-EOF h 显示命令帮助 f 显示磁盘分区 d 显示磁盘挂载 m 查看内存使用 u 查看系统负载 q 退出程序 EOF ;; f) lsblk #列出块设备信息 ;; d) df -h #易读的方式显示目前磁盘空间和使用情况。 ;; m) free -m #查看内存使用情况 ;; u) uptime #查看系统的负载 ;; q) exit #退出程序 ;; esac done
6、编写脚本实现计算用户输入参数数字的和,分别用shift
和for
循环实现。
一)、shift循环实现
#主要代码 #!/bin/bash SUM=0 #初始化SUM while [ $# -ne 0 ] # $#表示提供到shell脚本或者函数的参数总数,若不为零则执行循环 do let SUM=$SUM+$1 #SUM循环相加输入参数 shift done echo SUM=$SUM #输出SUM的值
二)、for循环实现
#主要代码 #!/bin/bash SUM=0 #初始化SUM for i do let SUM=SUM+$i #SUM循环相加输入参数 done echo SUM=$SUM #输出SUM的值
7、编写脚本,生成一个phonenumber.txt
文件,文件内容为随机产生以139开头的手机号1000个,每个手机号占一行。
#主要代码 #!/bin/bash file=./phonenumber.txt #创建phonenumber.txt文件 for ((i=1;i<=1000;i++)) #for循环,循环次数为1000 do n1=$[ $RANDOM%10] #产生随机数赋给n1-n8 n2=$[ $RANDOM%10] n3=$[ $RANDOM%10] n4=$[ $RANDOM%10] n5=$[ $RANDOM%10] n6=$[ $RANDOM%10] n7=$[ $RANDOM%10] n8=$[ $RANDOM%10] echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> $file #将139n1n2n3n4n5n6n7n8赋予文件中 done
8、在第7题产生的1000
个电话号码中抽取5位幸运号码,并显示,要求只显示前3三位数字和后4位数字,中间四位用*代替。
#主要代码 #!/bin/bash phone=./phonenumber.txt #文件指针phone指向phonenumber.txt for ((i=1;i<=5;i++)) #for循环,循环5次 do line=`wc -l $phone | cut -d' ' -f1` #定位幸运号码所在行号 luck_line=$[RANDOM%$line+1] luck_number=`head -$luck_line $phone | tail -1` #去除幸运号码 echo "139****${luck_number:7:4}" #显示到屏幕 echo $luck_number >> luck.txt sed -i "/$luck_number/d" $phone #删除已被抽取的号码 done
9、使用until
语句批量创建10
个用户,要求stu1-stu5
用户的UID
分别为2001-2005
,stu6-stu10
用户的家目录分别在/rhome/stu6-/rhome/stu10
。
#主要代码 #!/bin/bash if [ -d /rhome ] #判断目录是否存在 then echo "/rhome目录已存在" #存在则在屏幕显示/rhome目录已存在 else mkdir /rhome #否则,创建rhome目录已创建成功 echo "/rhome不存在,已创建成功" #显示/rhome不存在,已经创建成功 fi i=1 until [ $i -gt 5 ] #判断i是否大于5,大于5则跳出循环 do useradd stu$i -u $[ 2000+$i ] && echo "stu$i:123" | chpasswd && echo "stu$i创建成功" let i++ done until [ $i -gt 10 ] do useradd stu$i -d /rhome/stu$i && echo "stu$i:123" | chpasswd && echo "stu$i创建成功" let i++ done
执行完后,可用for i in {1..10};do userdel -r stu$i命令批量删除指定用户
10、编写脚本收集用户输入的基本信息(姓名,性别,年龄),如果用户不输入一直提示用户输入,最后根据用户输入的信息输出相应的内容。
#主要代码 #!/bin/bash input_fun(){ #定义input_fun函数 input_var="" #定义输入为空 output_var=$1 #第一位参数的值赋予输出 while [ -z $input_var ] #判断输入长度 do read -p "$output_var" input_var done echo $input_var } name=`input_fun 请输入你的姓名:` #调用input_fun函数 sex=`input_fun 请输入你的性别:` age=`input_fun 请输入你的年龄:` echo "你的姓名是$name" echo "你的性别是$sex" echo "你的年龄是$age"