项目内容
这个作业属于哪个课程 班级课程的主页链接
这个作业的要求在哪里 作业要求链接接地址
学号-姓名 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、编写脚本实现计算用户输入参数数字的和,分别用shiftfor循环实现。

一)、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-2005stu6-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"