项目 内容
这个作业属于那个课程 这里是链接
作业要求在哪里 这里是链接
学号-姓名 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。

    代码:
  1. read -p '请输入一个字符串:' str
  2. if [ $str = "hello" ]
  3. then
  4. echo "hello wxr"
  5. else
  6. echo "请输入hello"
  7. fi

结果如图:

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

    代码:
  1. read -p '请输入用户名:' user_name
  2. id $user_name &> /dev/null #/dev/null 代表空,即将输入内容给user_name变量。
  3. if [ $? -eq 0 ] #判断是否匹配
  4. then
  5. echo "存在用户$user_name"
  6. else
  7. echo "不存在用户$user_name"
  8. fi

结果如图:

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

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

结果如图:

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

    代码:
  1. read -p 'please input a integer:' num
  2. [ $num -eq 1 ] && echo '$num is not a prime number'&&exit #如果num=1,输出1不是质数(加粗)
  3. [ $num -eq 2 ] && echo '$num is a prime number'&&exit #如果num=2,输出1是质数
  4. for i in `seq 2 $[$num-1]`
  5. do
  6. [ $[$num%i] - eq 0] && echo "$num is not a prime number"&&exit #对num进行求余运算,判断是否质数
  7. done
  8. echo "%num is a prime number"&&exit

结果如图:

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

    代码:
  1. cat <<-EOF
  2. h display command help
  3. f display disk partition
  4. d display disk mount
  5. m check memory usage
  6. u check system load
  7. q exit program
  8. EOF
  9. while true
  10. do
  11. read -p "please choose the operation:" action
  12. case $action in
  13. h)
  14. cat <<-EOF #EOF一般会配合cat能够多行文本输出
  15. h display command help
  16. f display disk partition
  17. d display disk mount
  18. m check memory usage
  19. u check system load
  20. q exit program
  21. EOF
  22. ;;
  23. f)
  24. lsblk
  25. ;;
  26. d)
  27. df -h
  28. ;;
  29. m)
  30. free -m
  31. ;;
  32. u)
  33. uptime
  34. ;;
  35. q)
  36. exit
  37. ;;
  38. esac
  39. done

结果如图:

  1. 编写脚本实现计算用户输入参数数字的和,分别用 shift 和 for 循环实现。

    代码如下:
  1. SUM=0
  2. while [ $# - ne o]
  3. do
  4. let SUM=$SUM+$i
  5. done
  6. echo SUM=$SUM
  7. SUM=0
  8. for i
  9. do
  10. let SUM=$SUM+$i
  11. done
  12. echo SUM=$SUM

结果如图:

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

    代码:
  1. file=./phonenumber.txt
  2. for ((i=1;i<=1000;i++))
  3. do
  4. n1=$[ $RANDOM%10]
  5. n2=$[ $RANDOM%10]
  6. n3=$[ $RANDOM%10]
  7. n4=$[ $RANDOM%10]
  8. n5=$[ $RANDOM%10]
  9. n6=$[ $RANDOM%10]
  10. n7=$[ $RANDOM%10]
  11. n8=$[ $RANDOM%10]
  12. echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> $file
  13. done

结果如图:

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

    代码:
  1. phone=./phonenumber.txt
  2. for ((i=1;i<=5;i++))
  3. do
  4. line=`wc -l $phone | cut -d' ' -f1`
  5. luck_line=$[ $random%$line+1]
  6. luck_number=`head -$luck_line $phone | tail -1`
  7. echo "139****${luck_number:7:4}
  8. echo $luck_number >> luck.txt
  9. sed -i "/$luck_number/d" $phone
  10. done

结果如图:

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

    代码:
  1. if [ -d /rhome]
  2. then
  3. echo "/rhome directory exists"
  4. else
  5. mkdir /rhome
  6. echo "/rhome directory does not exists,but has created"
  7. fi
  8. i=1
  9. until [ $i -gt 5]
  10. do
  11. useradd stu$i -u $[2000+$i] && echo 123 | passwd --stdin stu$i
  12. let i++
  13. done
  14. until [ $i -gt 10]
  15. do
  16. useradd stu$i -d /rhome/stu$i && echo 123 | passwd --stdin stu$i
  17. let i++
  18. done

结果如图:

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

    代码:
  1. input_fun(){
  2. input_var=""
  3. ounput_var=$1
  4. while [ -z $input_var ]
  5. do
  6. read -p "$output_var" input_var
  7. done
  8. echo $input_var
  9. }
  10. name=`input_fun please input your name:`
  11. sex=`input_fun please input your sex:`
  12. age=`input-fun please input your age:`
  13. echo "your name is $name"
  14. echo "your sex is $sex"
  15. echo "your age is $age"

结果如图:

shell脚本编程(ubantu)的更多相关文章

  1. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  2. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  3. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  4. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  5. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  6. 【Linux】Shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  7. 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/

  8. Shell脚本编程总结及速查手册

    Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算符/if语句/循环控制/… 但在开始之前, 我想先理清Shell语言与Shell之间的关系. ...

  9. 关于shell脚本编程的10个最佳实践

    每一个在UNIX/Linux上工作的程序员可能都擅长shell脚本编程.但大家解决问题的方式却不尽相同,这要取决于对专业知识的掌握程度.使 用命令的种类.看待问题的方式等等.对于那些处在shell脚本 ...

随机推荐

  1. C#读取静态类常量属性和值

    1.背景最近项目中有一个需求需要从用户输入的值找到该值随对应的名字,由于其它模块已经定义了一份名字到值的一组常量,所以想借用该定义.2.实现实现的思路是采用C#支持的反射.首先,给出静态类中的常量属性 ...

  2. 在vscode中怎样debug调试go程序

    随着互联网时代的飞速发展,我们编码使用的开发利器也在不断更新换代,古话说工欲善其事必先利其器,对于Java开发者而言,eclipse和idea这两款神器各有千秋,因自己的爱好可以选取不同的IDE,但是 ...

  3. oracle去除重复数据与oracle分页

    一.去除oracle中重复数据,可以使用rowid列,rowid列是一个伪列,该列在数据库中灭一个表中都有,但是我们查询数据库的时候,默认都没有给我们返回这一列,这一列用来区分数据库中的每一行时间,可 ...

  4. 工作中常用到的Java集合类有哪些?

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y Java集合是我认为在Java基础中最最重要的知 ...

  5. Nvue/Weex

    Nvue/Weex 使用Uniapp做了一个App,感觉性能不是很好,了解过Uniapp的Nvue,就想做一个纯Nvue项目,其实基本就是做一个Weex项目,不得不说坑是真的多,但是渲染性能真的是没得 ...

  6. ORM单表查询,跨表查询,分组查询

    ORM单表查询,跨表查询,分组查询   单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models ...

  7. 关于Web2.0

    前言:本来是想写HTML的,发现没什么好写的,就简单写一下Web2.0好了 什么是Web 2.0: "Web 2.0 is the business revolution in the co ...

  8. [CVPR 2019]Normalized Object Coordinate Space for Category-Level 6D Object Pose and Size Estimation

    论文地址:https://arxiv.org/abs/1901.02970    github链接:https://github.com/hughw19/NOCS_CVPR2019 类别级6D物体位姿 ...

  9. 为什么你的程序配了classpath还是找不到类

    classpath简介 classpath是java程序时拥有的一个系统变量,这个变量可以通过如下方式获取 System.out.println(System.getProperty("ja ...

  10. MATLAB plot 画图大全

    距离上一次打开Matlab已经过去了半年多,再次上手,画图时诸多不熟悉,促使我写下这篇blog,自己以后可以快速查看,也分享给大家~ 二维线图  plot plot(X1,Y1,LineSpec1,. ...