SHELL编程综合练习1

一、 实验准备(预防抄袭,此步必做)

  1. 请将命令提示符设为你的学号:输入PS1=你的学号_,即学号之后跟下划线,例如PS1=110015_, 回车执行
  2. 如发现命令提示符和你的学号不匹配,实验报告视为抄袭或无效,呵呵

二、 实验项目

(一)第一个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

一、 实验准备(预防抄袭,此步必做)

  1. 请将提示符设为:学号加波浪号。输入PS1=学号~,如PS1=110015~, 回车执行
  2. 如发现提示符、学号不匹配, 视为抄袭或无效

二、 实验项目

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编程综合练习的更多相关文章

  1. Shell 编程综合案例

    Shell编程综合案例 Shell也学习了大概的知识,现在这篇文章就大概讲述下如何使用shell编写一个脚本呢?下面就展示一个大家常用的数据库备份案例来进行展示. 需求分析 1)每天凌晨2:10分备份 ...

  2. Linux(二十一)Shell编程

    21.1 为什么要学习Shell编程 (1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. (2)对于JavaEE和Python程序员来说,工作的需要,你的老大会 ...

  3. 大数据学习——shell编程

    03/ shell编程综合练习 自动化软件部署脚本 3.1 需求 1.需求描述 公司内有一个N个节点的集群,需要统一安装一些软件(jdk) 需要开发一个脚本,实现对集群中的N台节点批量自动下载.安装j ...

  4. Linux_10------Linux之shell编程------变量

    .-9 vim num.sh #! /bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) #变量sum是num1和num2的综合 echo $sum 执行 ./ ...

  5. 详解shell编程中2>&1用法

    在使用 linux 命令或者 shell 编程时,这个用法常会遇到 2>&1 下面看一个命令示例,然后分析下他是如何工作的: ls foo > /dev/null 2>&am ...

  6. Linux Shell编程与编辑器使用详解

    <Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...

  7. shell编程基础进阶

    为什么学习shell编程 shell脚本语言是实现linux/unix 系统管理机自动化运维所必备的重要工具,linux/unix系统的底层及基础应用软件的核心大部分涉及shell脚本的内容.每一个合 ...

  8. linux源码安装mysql,shell编程学习,ubuntu

    一.mysql安装 以源码安装的方式编译和安装Mysql 5.6. 1.卸载旧版本 rpm -qa | grep mysql 检查是否有旧版本 查询结果:mysql-libs-5.1.73-7.el6 ...

  9. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

随机推荐

  1. Oracle记录表删除操作简单方法

    最近项目中Oracle库中一个表log_gpackage有数据丢失现象,但因为没有启用归档,所以CDC和Dataguard都无法使用.google一下,最简单的方法,增加触发器处理逻辑: ---创建触 ...

  2. Django组件 之 ookie 和 session

    -----------------------------------------------------------------------------------------相信自己,水滴石穿,不 ...

  3. log4j打印堆栈信息

    原文地址:https://blog.csdn.net/xianyu_0418/article/details/6043174 大家都知道,网站在运行的过程中,打印必要的log对记录网站的运行情况.从而 ...

  4. 1076E - Vasya and a Tree(图的遍历)

    题意:给出一棵根节点为1的树,执行m次修改操作,每次修改为a,b,c,表示a节点的子树中,距离a小于等于b的子节点的权值加上c,求m次操作后每个节点的权值 分析:用线段树维护每层节点的权值,然后dfs ...

  5. 使用fiddlercore修改网页的返回内容

    最近研究了一下FiddlerCore,发现这是个非常强大的工具.可以用来采集网页.修改网页数据.开发页游外挂等等. 使用这个工具,需要掌握一定的html和http知识,官方网站上也有例子可以下载. 看 ...

  6. 用Python删除本地目录下某一时间点之前创建的文件

    参考http://www.cnblogs.com/iderek/p/8035757.html os.listdir(dirname):列出dirname下的目录和文件 os.getcwd():获得当前 ...

  7. oninput事件和onchange事件区别

    onchange事件 触发条件:在域内容更改时触发,也可用于单选框和复选框改变后触发 作用对象:select.input.textarea oninput事件 触发条件:在域内容更改时触发(严格说在用 ...

  8. Laravel 核心--Facades 门面

    Laravel 核心--Facades 门面 伊Summer 关注  0.1 2017.08.12 19:07* 字数 2017 阅读 1089评论 0喜欢 5 介绍 Facades 为应用的 IoC ...

  9. jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等

    转载:https://blog.csdn.net/chenchunlin526/article/details/77448168 jQuery操作复选框checkbox技巧总结 --- 设置选中.取消 ...

  10. 安装MongoDB(做成Windows服务)并加载C#驱动程序

    一 Mongodb简介: 通过查询网上的一些信息来介绍一下Mongodb的优势:MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全,完全可以替代MySQL.在使用Mo ...