shell脚本编程(ubantu)

项目 内容
这个作业属于那个课程 这里是链接
作业要求在哪里 这里是链接
学号-姓名 17041506-张政
作业学习目标 了解shell脚本的概念及使用;掌握shell脚本语言的基本语法;学习简单的shell脚本编程

前言————环境配置

ubantu默认的dash环境,它的特点是速度更快,但功能相比bash要少很多。而bash是很多Linux平台的内定shell,特点是应用广泛、功能较多。我推荐这篇博客,有bash和dash的区别,读者感兴趣可以去看看:[Linux shell语言——dash和bash](https://www.jianshu.com/p/762d4cccee7e) 如下是dash转bash过程,画个重点。再运行代码`sudo dpkg-reconfigure dash1`后,一定要选择否!!!博主手快(手贱),选了是,自己坑自己。。。

这是简单的输出hello world(哈哈哈哈哈哈,查看test文件时候手又滑了,多敲了一个空格,望读者理解理解)

shell脚本运行有多种方式,不同方式和当前的进程有关。这玩意儿解释起来很复杂(其实是博主太菜),所以推给读者两篇博客。博客一:执行Shell脚本(多种方法) 博客二: Linux中的进程及进程控制

正...正...正...文来了

  1. 让用户输入一个字符串,如果用户输入的是hello,请输入hello 用户姓名首字母缩写,否则输出请输入hello。
    代码:
read -p '请输入一个字符串:' str 
if [ $str = "hello" ] 
then    
    echo "hello wxr" 
else    
    echo "请输入hello" 
fi

结果如图:

  1. 编写一脚本,判断输入用户名是否存在,输出结果只能是存在该用户或者不存在该用户,不能有其 他数据输出。
    代码:
read -p '请输入用户名:' user_name 
id $user_name &> /dev/null #/dev/null 代表空,即将输入内容给user_name变量。
if [ $? -eq 0 ] #判断是否匹配
then    
    echo "存在用户$user_name" 
else    
    echo "不存在用户$user_name" 
fi

结果如图:

  1. 编写脚本计算1-100之间的所有奇数和
    代码:
SUM=0
for i in {1..100..2} #建立循环
do    
  let SUM=$SUM+$i #sum=sum+i
done
echo "1-100之间的所有奇数和为: $SUM" #类似c中的printf函数

结果如图:

  1. 编写脚本,判断键盘输入整数是否为质数。
    代码:
read -p 'please input a integer:' num
[ $num -eq 1 ] && echo '$num is not a prime number'&&exit #如果num=1,输出1不是质数(加粗)
[ $num -eq 2 ] && echo '$num is a prime number'&&exit #如果num=2,输出1是质数
for i in  `seq 2 $[$num-1]`
do
   [ $[$num%i] - eq 0] && echo "$num is not a prime number"&&exit #对num进行求余运算,判断是否质数
done
echo "%num is a prime number"&&exit

结果如图:

  1. 模拟一个多任务维护界面,当执行程序时先显示总菜单,然后进行选择后做相应的维护监控操作。
    代码:
cat <<-EOF
  h display command help
  f display disk partition
  d display disk mount
  m check memory usage
  u check system load
  q exit program
EOF
while true
do
   read -p "please choose the operation:" action
   case $action in
       h)
         cat <<-EOF #EOF一般会配合cat能够多行文本输出
              h display command help
              f display disk partition
              d display disk mount
              m check memory usage
              u check system load
              q exit program
EOF
          ;;
       f)
         lsblk
         ;;
       d)
         df -h
         ;;
       m)
         free -m
         ;;
       u)
         uptime
         ;;
       q)
         exit
         ;;
    esac
done

结果如图:

  1. 编写脚本实现计算用户输入参数数字的和,分别用 shift 和 for 循环实现。
    代码如下:
SUM=0
while [ $# - ne o]
do
  let SUM=$SUM+$i
done
echo SUM=$SUM


SUM=0
for i
do
  let SUM=$SUM+$i
done
echo SUM=$SUM

结果如图:

  1. 编写脚本,生成一个phonenumber.txt文件,文件内容为随机产生以139开头的手机号1000个, 每个手机号占一行。
    代码:
file=./phonenumber.txt
for ((i=1;i<=1000;i++))
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]
  echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> $file
done

结果如图:

  1. 在第7题产生的1000个电话号码中抽取5位幸运号码,并显示,要求只显示前3三位数字和后4位数 字,中间四位用*代替。
    代码:
phone=./phonenumber.txt
for ((i=1;i<=5;i++))
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

结果如图:

  1. 使用 until 语句批量创建10个用户,要求 stu1-stu5 用户的 UID 分别为 2001-2005 , stu6stu10 用户的家目录分别在 /rhome/stu6-/rhome/stu10
    代码:
if [ -d /rhome]
then
    echo "/rhome directory exists"
else
    mkdir /rhome
    echo "/rhome directory does not exists,but has created"
fi
i=1
until [ $i -gt 5]
do
  useradd stu$i -u $[2000+$i] && echo 123 | passwd --stdin stu$i
  let i++
done
until [ $i -gt 10]
do
  useradd stu$i -d /rhome/stu$i && echo 123 | passwd --stdin stu$i
  let i++
done

结果如图:

  1. 编写脚本收集用户输入的基本信息(姓名,性别,年龄),如果用户不输入一直提示用户输入, 后根据用户输入的信息输出相应的内容。
    代码:
input_fun(){
    input_var=""
    ounput_var=$1
    while [ -z $input_var ]
    do
      read -p "$output_var" input_var
    done
    echo $input_var
}
name=`input_fun please input your name:`
sex=`input_fun please input your sex:`
age=`input-fun please input your age:`

echo "your name is $name"
echo "your sex is $sex"
echo "your age is $age"

结果如图:

posted @ 2020-04-16 17:15  anhui_first_handsome  阅读(308)  评论(0编辑  收藏  举报