实验五 shell脚本编程

项目

内容

这个作业属于哪个课程

班级课程的主页链接 

这个作业的要求在哪里

作业要求链接地址

学号-姓名

17041417-李嘉麒

作业学习目标

1、了解shell脚本的概念及使用

2、掌握shell脚本语言的基本语法

3、学习简单的shell脚本编程

 

实验内容

到exp5目录下

1、让用户输入一个字符串,如果用户输入的是hello,请输入hello 用户姓名首字母缩写,否则输出请输入hello

read -p 'please input a string: ' str  #显示提示信息,并获得输入的字符串存入str中

if    [$str ="hello"]            #条件判断,输入的内容str是否等于hello
then
    echo "hello li jia qi"         #是,输出欢迎信息
else
    echo "please input 'hello' "     #否,输出提示信息
fi

结果示意图

2、编写一脚本,判断输入用户名是否存在,输出结果只能是存在该用户或者不存在该用户,不能有其他数据输出。

read -p 'please input username : ' user_name
#显示提示信息,并获得输入的用户名存入user_name中

id $user_name &> /dev/null 
#查找user_name用户,并将输出结果重定向至/dev/null废弃,不显示任何结果

if [$? -eq 0] 
#查看上一个命令运行后退出状态是否成功

then
  echo 'The user exist: $user_name '
  #是,找到了指定用户名,输出提示信息

else
  echo 'The user dose not exist:$user_name'
  #否,没找到了指定用户名,输出提示信息
fi

结果示意图 

3、编写脚本计算1-100之间的所有奇数和。

sum=0              #定义变量

for  i in {1..100..2}    #循环变量i遍历数组:100以内的奇数
do
        let $sum=$sum+$i  #将所有奇数累加
done

echo     "The result : $sum  #输出累加结果

 

 结果示意图

4、编写脚本,判断键盘输入整数是否为质数。

read -p 'please input a positive integer: '  num
#显示提示信息,并将输入的数,存入num

[$num -eq  1]  &&  echo  '$num  is  prime  number '  &&  exit  
[$num -eq  2]  &&  echo  '$num  is  prime  number '  &&  exit
#将num与1,2比较,只要是1,或是2这两个特殊的数,直接显示是质数并退出

for  i  in  `seq  2  $[ $num-1]`
#不为1,2,循环变量i遍历序列:从2一直递增至num-1,步长为1

do
    [$[ $num%i] -eq 0 ]  && echo "$num is not prime number" && exit
#若存在num可被i整除,为质数,显示是质数并退出

done

echo "$num is a prime number" && exit
#若不满足之前的所有条件,则为质数,并显示信息

 结果示意图

5、模拟一个多任务维护界面,当执行程序时先显示总菜单,然后进行选择后做相应的维护监控操作

cat    <<-EOF      #显示信息,直到下一个EOF结果
    h    display command help
    f    display disk partition
    d    display disk mount
    m    view memory usage
    u    view system load
    q    esc    program
EOF

while    true     #死循环
do
    read -p    'please select what you want to do (help h):' action
  #显示提示信息,并将选择的字母赋给action


    case $action in
  #以action的值,分情况执行

        h)    #若为h,显示提示信息
           cat    <<-EOF
           h    display command help
           f    display disk partition
           d    display disk mount
           m    view memory usage
           u    view system load
           q    esc    program
        EOF
        ;;
    f)    #若为f,显示磁盘分区
            lsblk
            ;;
    d)    #若为d,显示磁盘挂数
            df  -h
            ;;
    m)    #若为m,查看内存使用
            free -m
            ;;
    u)    #若为u,查看系统负载
            uptime
            ;;
    q)    #若为q,退出程序
            exit
            ;;
    esac
done

 结果示意图

6、编写脚本实现计算用户输入参数数字的和,分别用shiftfor循环实现。

#shift版本

sum=0                        #定义变量sum暂存结果
while    [ $# -ne  0]     #若命令行参数个数不为0,继续循环
do
        let  sum=$sum+$1   #将$1D的值加入sum中
        shift          #将位置参数左移一位,如当前是$1,移位后是$2
done
echo    sum=$sum        #输出结果

 结果示意图

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

#for版本

sum=0        #定义变量sum暂存结果

for    i      #循环变量i遍历所有参数
do
    let    sum=$sum+$i   #将所有参数求和
done

echo    sum=$sum  #输出结果

 结果示意图

7、编写脚本,生成一个phonenumber.txt文件,文件内容为随机产生以139开头的手机号1000个,每个手机号占一行。

file=./phonenumber.txt
#定义文件指针file指向phonenumber.txt文件

for    ((i=1;i<=1000;i++))
#循环1000次

do
    N1=$[    $RANDOM%10]
    N2=$[    $RANDOM%10]
    N3=$[    $RANDOM%10]
    N4=$[    $RANDOM%10]
    N5=$[    $RANDOM%10]
    N6=$[    $RANDOM%10]
    N7=$[    $RANDOM%10]
    N8=$[    $RANDOM%10]
    #随机生成从0-9的数,生成8个

    echo    "139$N1$N2$N3$N4$N5$N6$N7$N8"    >>$file
    #重定向将电话号码写入file中
done

 结果示意图

8、在第7题产生的1000个电话号码中抽取5位幸运号码,并显示,要求只显示前3三位数字和后4位数字,中间四位用*代替。

phone=./phonenumber.txt
#定义文件指针phone指向文件phonenumber.txt

for    ((i=1;i<=5;i++))
#循环5次

do
        line=`wc -l $phone | cut -d' ' -f1`
     #查找总行数
      
        luck_line=$[ $RANDOM%$ine+1]
     #随机获得一行数

        luck_number=`head -$luck_line $phone  | tail -1`
     #获取该行数信息

        echo  "139****${luck_number:7:4}"
     #显示提取的号码信息,只显示最后四位


        echo  $luck_number >> luck.txt
     #将得到的号码存入luck.txt中


        sed -i   "/$luck_number/d"  $phone
     #在删除原文件中删除该号码
done

 结果示意图

 

9、使用until语句批量创建10个用户,要求stu1-stu5用户的UID分别为2001-2005stu6-stu10用户的家目录分别在/rhome/stu6-/rhome/stu10

if    [ -d /rhome]      #判断rhome目录是否存在
then
  #是,显示提示信息
    echo "/rhome directory already exists"
else
  #否,创建目录,显示提示信息
    mkdir    /rhome
    echo  "/rhome inexistence,created successfully"
fi

i=1    #变量i

until    [  $i  -gt  5]  #循环1-5次
do
    useradd stu$i -u $[2000+$i]  &&  echo  123  |  passwd  --stdin stu$i
  #第1-5个用户的UID从2001-2005,
    
    let i++
done

until    [  $i  -gt  10]
do
    useradd stu$i -d /rhome/stu$i  &&  echo  123  |  passwd  --stdin stu$i
  #设置第6-10个用户的家目录
   
     let i++
done

 结果示意图

 

 

10、编写脚本收集用户输入的基本信息(姓名,性别,年龄),如果用户不输入一直提示用户输入,最后根据用户输入的信息输出相应的内容。

input_fun(){
    input_var=""  #存放用户输入内容
    output_var=$1 #传递询问内容参数
    while[  -z $input_var  ]  #当输入内容为空时循环
    do
        read  -p  "$output_var"  input_var
     #显示询问参数,并将输入内容保存到input_var

    done
    echo $input_var  #输出输入内容
}

#调用三次函数
name=`input_fun,please_input_your_name:`
gender=`input_fun,please_input_your_gender:`
age=`input_fun,please_input_your_age:`

#显示结果
echo "your name:$name"
echo "your gender:$sex"
echo "your age:$age"

 结果示意图

 

posted @ 2020-04-12 19:04  BUG不止  阅读(474)  评论(0)    收藏  举报