SHELL编程综合练习
SHELL编程综合练习1
一、 实验准备(预防抄袭,此步必做)
- 请将命令提示符设为你的学号:输入PS1=你的学号_,即学号之后跟下划线,例如PS1=110015_, 回车执行
- 如发现命令提示符和你的学号不匹配,实验报告视为抄袭或无效,呵呵
二、 实验项目
(一)第一个shell程序
Shell程序是一个文本文件,操作系统不能把一个文本文件装入内存并且执行,所以只能启动一个解释器,来逐条解释执行,这个解释器就是Shell,shell程序的第一行必须指明这个解释器。
执行命令 echo $SHELL
可以看到我们使用的shell: /bin/bash
现在假如我们需要一个脚本,检查某个用户名是否合法用户,这个脚本命名为check_in:
执行命令
touch check_in
建立一个空白文件,然后双击打开,写入如下代码
#!/bin/bash
if grep "^$1:" /etc/passwd >/dev/null 2>/dev/null
then
echo "$1 is a valid login name"
else
echo "$1 does not exist."
fi
exit 0
存盘退出,执行命令
chmod +x check_in
然后执行命令
./check_in sdyu, 执行结果(此处插入截图)

再执行
./check_in xyzw, 执行结果:(此处插入截图)

(二)linux登录模拟
执行命令touch log_in,建立空白文件log_in
双击log_in打开,键入如下代码:
#!/bin/bash
name="sdyu"
pass="123456"
echo -n "enter the name:"
read myname
echo –n "enter your password:"
stty –echo
read mypass
stty echo
echo –e "\n"
if [ "$myname" != "$name" ] || [ "$mypass" != "$pass" ]
echo "the name or the password is not right"
else
echo "you can log in"
fi
执行命令chmod +x log_in,
键入./log_in, 执行
进行输入测试:(此处插入截图,测试的时候输入正确和错误数据分别测试)

(三)教程220页,rwx.sh
执行命令touch rwx.sh, 然后双击打开,键入例题中的命令,再次
chmod +x rwx.sh,
键入./rwx.sh 执行:(插入截图)

(四)教程225页,score01.sh,
执行命令touch score01.sh, 然后双击打开,键入例题中的命令,再次
chmod +x score01.sh,
键入./ score01.sh 执行:(插入截图)

SHELL编程综合练习3
一、 实验准备(预防抄袭,此步必做)
- 请将提示符设为:学号加波浪号。输入PS1=学号~,如PS1=110015~, 回车执行
- 如发现提示符、学号不匹配, 视为抄袭或无效
二、 实验项目
1、 stty:输入回应的关闭和打开
执行命令:
stty –echo
关闭键盘输入回显,然后依次执行命令
who
ls
有什么效果?
请解释为什么输入的命令没有显示,命令结果却能显示?
(此处作答):命令结果并不是从键盘输入到显示屏上的,命令stty –echo关闭键盘输入回显,但没有关闭从其他文件输出到显示屏。
再使用命令
stty echo
恢复键盘输入回显
$ 关于stty命令的使用,请参考 man stty
2、 echo和printf:输出信息和变量的内容
依次执行下列命令:
name=" Harry Potter"
echo "Mr. $name welcome to Hogwarts School of Witchcraft "
printf "Mr. %s welcome to Hogwarts School of Witchcraft \n" $name
下面粘贴命令执行截图Ê
默认情况下,echo自动换行,printf不会自动换行
可以用echo -n 抑制自动换行,printf 可以用\n输出一个新行
echo和printf功能差不多,可以根据个人喜好选择使用
3、测试和判断
程序中离不开分支和循环单元,shell script中做分支判断有这样几种方法:
- 执行一条命令,并测试命令的返回值: $? ,如果为0,命令执行成功,否则不成功
- test命令
- if、case、select等语法结构
第一种同学们已经熟悉了
4、test命令
test命令的格式:
test 条件
如果条件成立,test命令的返回值$? 为0, 否则非0
假如脚本中需要测试某个文件或者目录是否存在,可以使用
test -e file
来测试,如果文件存在,$?为0,否则非零
例如:
依次执行下列命令,并观察结果:
test -e xyzw
echo $?
touch xyzw
test –e xyzw
echo $?
下面粘贴命令执行截图Ê

书写test命令的时候,也可以简写,省略test关键词,简化书写方式,改为下面的写法,请依次执行下列命令:
[ -e wwwxxx ]
echo $?
touch wwwxxx
[ -e wwwxxx ]
echo $?
下面粘贴命令执行截图Ê
$ 注意:方括号右侧和左侧应有空格
test的更多用法见教材219页
5、字符串测试
程序中永远少不了的是字符串运算,例如,测试两个字符串是否相等
依次执行下列命令
ip1="192.168.0.1"
ip2="192.168.0.2"
[ "$ip1" = "$ip2"] 注意等号前后的空格
echo $?
下面粘贴命令执行截图Ê
$? 不为0,说明字符串不相等
关于字符串测试,见教程221页,请同学们自己多做练习
6、整数比较
整数比较的语法,见教材222页
-lt: less than的缩写,不是数字1
-ge: greater or equal 的缩写
同样注意运算符前后的空格
7、 if判断语句
if语句的语法结构,从if开始,到fi结束,fi是if颠倒过来写。
if语法有两种写法:
第一种写法:
if command
then
……
fi
第二种写法
if command;then
……
fi
第一种写法,command后面没有分号;then必须移到下一行
第二种写法,command后面有分号;then就可以写在同一行
注意当if后面的command执行成功的话,也就是$? 为0,才会执行then后面的命令,否则不会执行。
下面我们做个实验:
删除一个文件之前,可以检查它是不是一个空文件,尤其在备份的时候,空文件可以放心删除,非空文件则需要慎重
test –s file:当文件file非空时返回0
依次执行下列命令
touch test31.sh
touch xyzw
双击打开test31.sh,键入如下命令
#!/bin/bash
filename="xyzw"
if [ -s $filename ]
then
echo "the file $filename is not empty"
echo "and will not be deleted"
else
echo "the file $filename is empty"
echo "Deleting now......"
rm $filename
fi
存盘退出,执行命令
chmod +x test31.sh
然后执行 ./test31.sh
下面粘贴命令执行截图Ê
执行命令ls,文件xyzw是否已经被删除?
现在再依次执行命令
touch xyzw
dd if=/dev/zero of=xyzw bs=1M count=1
上面第二条命令使得空文件xyzw变成一个大小为1M的文件,注意M要大写。
执行命令
ls -l
可以验证文件xyzw的大小
现在再次执行上面的脚本
./test31.sh
下面粘贴命令执行截图Ê
8、 chmod:改变文件权限
chmod的意思是change mode,具体用法查阅man chmod
执行命令
touch anyfile
ls –l
下面粘贴命令执行截图Ê
可以看到文件anyfile缺少执行许可
再执行命令
chmod +x anyfile
ls -l
下面粘贴命令执行截图Ê
可以看到文件已经有了执行许可
执行 ./anyfile
没有任何输出,因为这是个空文件
9、read:接受用户输入
read 的用法是
read 变量名
将用户输入保存在变量中。
可以用 –p 选项加提示语:
read -p "prompt message " 变量名
read命令会等待用户输入到地老天荒,所以使用的时候,最好用 –t选项加一个计时器。
下面是一个实验:
touch test32.sh
双击test32.sh打开,输入:
#!/bin/bash
if read -t 5 -p "Please enter your name" name
then
echo "Hello $name"
else
echo "sorry, time out, game over"
fi
存盘退出,执行
chmod +x test32.sh
然后执行这个脚本:
./test32.sh
下面粘贴命令执行截图Ê
如果5秒之内不输入信息,read返回值$? 不为0,即输入没有成功
$注意 read以行为单位读取,碰到回车之后返回,但回车符号不计入输入之内。
SHELL编程综合练习的更多相关文章
- Shell 编程综合案例
Shell编程综合案例 Shell也学习了大概的知识,现在这篇文章就大概讲述下如何使用shell编写一个脚本呢?下面就展示一个大家常用的数据库备份案例来进行展示. 需求分析 1)每天凌晨2:10分备份 ...
- Linux(二十一)Shell编程
21.1 为什么要学习Shell编程 (1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. (2)对于JavaEE和Python程序员来说,工作的需要,你的老大会 ...
- 大数据学习——shell编程
03/ shell编程综合练习 自动化软件部署脚本 3.1 需求 1.需求描述 公司内有一个N个节点的集群,需要统一安装一些软件(jdk) 需要开发一个脚本,实现对集群中的N台节点批量自动下载.安装j ...
- Linux_10------Linux之shell编程------变量
.-9 vim num.sh #! /bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) #变量sum是num1和num2的综合 echo $sum 执行 ./ ...
- 详解shell编程中2>&1用法
在使用 linux 命令或者 shell 编程时,这个用法常会遇到 2>&1 下面看一个命令示例,然后分析下他是如何工作的: ls foo > /dev/null 2>&am ...
- Linux Shell编程与编辑器使用详解
<Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...
- shell编程基础进阶
为什么学习shell编程 shell脚本语言是实现linux/unix 系统管理机自动化运维所必备的重要工具,linux/unix系统的底层及基础应用软件的核心大部分涉及shell脚本的内容.每一个合 ...
- linux源码安装mysql,shell编程学习,ubuntu
一.mysql安装 以源码安装的方式编译和安装Mysql 5.6. 1.卸载旧版本 rpm -qa | grep mysql 检查是否有旧版本 查询结果:mysql-libs-5.1.73-7.el6 ...
- shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计
shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...
随机推荐
- Python_每日习题_0007_copy
题目:将一个列表的数据复制到另一个列表中. 程序分析:使用列表[:],拿不准可以调用copy模块 import copy a = [,,,,['a','b']] b = a #赋值 c = a[:] ...
- 割顶树 BZOJ1123 BLO
无向图中,求去掉点x[1,n]后每个联通块的大小. 考虑tarjan求bcc的dfs树,对于每个点u及其儿子v,若low[v]<prv[u],则v对u的父亲联通块有贡献,否则对u的子树有贡献.每 ...
- POJ - 3264 线段树模板题 询问区间最大最小值
这是线段树的一个模板题,给出一串数字,然后询问区间的最大最小值. 这个其实很好办,只需把线段树的节点给出两个权值,一个是区间的最小值,一个是区间的最大值,初始化为负无穷和正无穷,然后通过不断地输入节点 ...
- 关于function和task的说明
1. 关于函数function调用,总结两个要点: 1. 函数调用一般产生一个值,这个值被赋值给某个变量 2. 函数所返回的值只能是一个,不可以是多个,不能像C语言中采用指针的方式返回多个值.因 ...
- Jmeter操作之跨线程组传递参数
思路:将某一线程组内的变量通过“__setProperty”函数设置成jmeter的全局变量,在另一线程组中通过“__P”函数调用即可. 1.添加-后置处理器-BeanShell PostProces ...
- XManager&XShell如何保存登录用户和登录密码
Xshell配置ssh免密码登录 - qingfeng2556的博客 - CSDN博客https://blog.csdn.net/wuhenzhangxing/article/details/7948 ...
- Webbench、ab命令:做压力测试的工具和性能的监控工具
DDOS攻击:???DDOS概述:分布式拒绝服务(DDoS:Distributed Denial of Service)攻击,指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目 ...
- vue路由动态过渡效果
不多说,直接上代码 import Vue from 'vue' //引入vue import VueRouter from 'vue-router' //引入路由 Vue.use(VueRouter) ...
- SQL Server中JOIN的使用方法总结
JOIN 分为:内连接(INNER JOIN).外连接(OUTER JOIN).其中,外连接分为:左外连接(LEFT OUTER JOIN).右外连接(RIGHT OUTER JOIN).全外连接(F ...
- 自己用习惯的idea快捷键笔记
Ctrl + Space 自动完成(win10下冲突不能用,自己换成 Alt + \ ) 切换方法是菜单中依次打开 file -> settings -> keymap,搜索complet ...