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中的进程及进程控制
正...正...正...文来了
- 让用户输入一个字符串,如果用户输入的是hello,请输入hello 用户姓名首字母缩写,否则输出请输入hello。
代码:
read -p '请输入一个字符串:' str
if [ $str = "hello" ]
then
echo "hello wxr"
else
echo "请输入hello"
fi
结果如图:

- 编写一脚本,判断输入用户名是否存在,输出结果只能是存在该用户或者不存在该用户,不能有其 他数据输出。
代码:
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-100之间的所有奇数和
代码:
SUM=0
for i in {1..100..2} #建立循环
do
let SUM=$SUM+$i #sum=sum+i
done
echo "1-100之间的所有奇数和为: $SUM" #类似c中的printf函数
结果如图:

- 编写脚本,判断键盘输入整数是否为质数。
代码:
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
结果如图:

- 模拟一个多任务维护界面,当执行程序时先显示总菜单,然后进行选择后做相应的维护监控操作。
代码:
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
结果如图:

- 编写脚本实现计算用户输入参数数字的和,分别用 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
结果如图:

- 编写脚本,生成一个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
结果如图:

- 在第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
结果如图:

- 使用 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
结果如图:

- 编写脚本收集用户输入的基本信息(姓名,性别,年龄),如果用户不输入一直提示用户输入, 后根据用户输入的信息输出相应的内容。
代码:
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"
结果如图:

shell脚本编程(ubantu)的更多相关文章
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- Linux shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- Linux shell脚本编程基础之练习篇
shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...
- 【Linux】Shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- 学习笔记之Linux Shell脚本教程:30分钟玩转Shell脚本编程
Linux Shell脚本教程:30分钟玩转Shell脚本编程 http://c.biancheng.net/cpp/shell/
- Shell脚本编程总结及速查手册
Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算符/if语句/循环控制/… 但在开始之前, 我想先理清Shell语言与Shell之间的关系. ...
- 关于shell脚本编程的10个最佳实践
每一个在UNIX/Linux上工作的程序员可能都擅长shell脚本编程.但大家解决问题的方式却不尽相同,这要取决于对专业知识的掌握程度.使 用命令的种类.看待问题的方式等等.对于那些处在shell脚本 ...
随机推荐
- json 的基础入门
JSON是什么: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.在初始的项目开发中人们更倾向于使用xml来进行数据的传输,但当JSON出现后,开发者更倾 ...
- H5新特性之语义化标签
一.为什么要增加新的语义化标签 在HTML 5出来之前,我们用div来表示章节,但是这些div都没有实际意义,这样的布局方式使我们的结构不够清晰,于是语义化标签应运而生. 二.何为语义化标签 顾名思义 ...
- ArchLinux - 脚本安装使用指南
前面不想废话,讲什么脚本说明,功能什么的!只讲使用方法,其他的可以去Gitee看,去Github看. 脚本虽然支持Boot和UEFI,但是我打算一起讲,因为它们安装时的区别,只有3处不同. 第一步 先 ...
- 使用@property 添加width 和 height 属性
@property Python内置的@property装饰器就是负责把一个方法变成属性调用的: class Screen(object): def isint(self,px): if not is ...
- c++动态内存知识总结与疑问
书名 BOOK TITLE <Primer c++ 第5版> 基本信息 BASICS 阅读进度:第12章动态内存 阅读心得 LEARNINGS 在c++中,我知道的有静态内存.栈内存. ...
- pat 乙级 1015. 德才论 (25) c++
http://39.106.25.239 个人网站 欢迎访问 交流 1015. 德才论 (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Sta ...
- java两数相乘基础算法
下面是别人给我的代码: package com.bootdo; public class Test { public static void main(String[] args) { System. ...
- .Net Core2.2 使用 AutoMapper进行实体转换
一.遇到的问题 在. Core Api 的编写中,我们经常会对一些功能点进行新增编辑操作,同时我们有时也会进行查询,但是我们查询的表的数据与我们返回的数据相差甚大,这是我们有需要自己手动进行类型的转换 ...
- Python python 五种数据类型--字符串
# python 字符串的初始化 var1 = 'hello,world' # python 字符串为不可变类型 var2= var1* 2 print(var1) #hello,world prin ...
- FileReader 和Blob File文件对象(附formData初始化方法);
一.FileReader为读取文件对象 . api 地址 相关demo 现在只讨论 readAsArrayBuffer,readAsBinaryString,readAsDataURL,rea ...