博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux Shell学习笔记第三天
阅读量:7240 次
发布时间:2019-06-29

本文共 3603 字,大约阅读时间需要 12 分钟。

第三天:条件选择

大 纲

应用实例分析

条件测试

if…else…fi

case…in…esac

实现功能菜单:

执行脚本后

按1,显示当前时间

按2,显示CPU负载

按3,显示剩余内存

按0,退出脚本

按其他字符,提示超出选择范围后退出

 

分析步骤。

#date +%T

uptime awk截取

free –m

条件测试格式

#test –option obj

#[ -option obj ]

返回结果

表达式内容测试结果是真的

表达式内容测试结果是假的

测试的对象分类

执行结果(执行成功或失败)

文件(文件是否存在等)

文本(是否一致)

数字(数值比较)

条件测试的选项

选项 作用
-d 目录
-e 是否存在
-f 是否是普通文件
-s 文件大小是否等于0
-r 是否可读
-w 是否可写
-x 是否可执行

逻辑操作符号

选项
 作用
-a
 与操作
-o
 或操作
!
 非操作

实例:

#test –e /etc/passwd –a –e /etc/shadow 中间是a与操作,则都为0才得0

#test –e /etc/passwd –o –e /etc/groups 中间是o或操作,则有一真则真0

字符串操作符

== 两个字符串相等

!= 两个字符串不相等

-z 空字符串

-n 非空字符串

实例:

#test –z $LOGNAME

#echo $LOGNAME

#echo $?

 

数值比较操作符

符号
 说明
-eq
 等于 
-ne
 不等于 
-gt
 大于
-lt
 小于
-ge
 大于等于
-le
 小于等于

if…else…fi 条件选择

if控制结构的基本格式:

if条件 #判断开始 可以是命令,也可以是test语句

then #如果条件为真 反值真0则执行

命令1 #执行命令1

else #如果条件为假 反值假1则执行

命令2 #执行命令2

fi #判断结束

实例(if…else…fi)1

inputtest.sh

#!/bin/bash

#input test

echo –n “Enter your name:”

read name

#did the user just hit return

if [ "${name}" == "" ]

then

echo “You did not enter any information”

else

echo “Your name: ${name}”

fi

 

 

实例(if…else…fi)2

filecopy.sh

#!/bin/bash

#file copy

if cp /etc/passwd passwd.bak 2>/dev/null 2>/dev/null 丢掉错误提示

then

echo “Good Copy!”

else

echo “`basename $0`: error,could not copy”

fi

 

if…else…fi的嵌套 (两层的嵌套)

if 条件1;then

if 条件2;then

命令1

else

命令2

else

if条件3;then

命令3

else

命令4

fi

case…in…esac条件选择 (比较灵活的方式)

case语句多用于较多分支判断

case格式: (多种模式,只匹配和variable相等的模式)

case variable in

模式1)命令1…;;

模式2)命令2…;;

esac

匹配模式

* 匹配任意字符

? 匹配任意单字符

[] 匹配字符范围

 

case…in.esac实例1

#!/bin/bash

#case select

echo –n “enter a number from 1 to 5:”

read NUM

case $NUM in

1) echo “you select 1″ ;;

2) echo “you select 2″ ;;

3) echo “you select 3″ ;;

4) echo “you select 4″ ;;

5) echo “you select 5″ ;;

*) echo “basename $This is not between 1 and 5″

esac

 

case…in.esac实例2

题目是:学生的考试成绩是0-100分,在85以上的要提示you are the best!,在70-84显示you get a good mark! ,在60-74的显示come on!,60分以下显示You must study hard!

#!/bin/bash

echo –n “please input your mark:”

read mark

case $mark in

100|9[0-9]|8[5-9]) echo “you are the best!”;; 100、90-99、85-89

8[0-4]|7[0-9]) echo “you get a good mark!”;; 80-84、70-79

7[0-4]|6[0-9]) echo “come on!”;; 70-74、60-69

[0-5][0-9]) echo “You must study hard!”;; 00-59

esac

解决今天的问题

使用if…else…fi的方式对输入的变量进行判断。

在每个判断的分支上执行相应的语句。

menu.sh

#!/bin/bash

clear

echo “——————–menu—————–”

echo “1) Show Time”

echo “2) CPU load”

echo “3) Memory free”

echo “0) Exit”

echo “——————————————–”

echo -n “Enter you chose [0-3]:”

read NUM

 

if [ ${NUM} -lt 0 -o ${NUM} -gt 3 ]

then

echo “This is not between 0-3.”

else

if [ "${NUM}" == "1" ]

then

echo “`date +%T`”

else

if [ "${NUM}" == "2" ]

then

echo “`uptime | awk -F ‘[,:]‘ ‘{print $7}'`”

else

if [ "${NUM}" == "3" ]

then

echo “`free -m | awk ‘$1==”Mem:”{print $4}'`”

else

exit

fi

fi

fi

fi

 

 

本节课回顾:

条件测试的类型

文件测试

文本测试

数值测试

逻辑测试

if…else…fi条件选择结构

case…in…esac

课后测试

1、修改menu.sh 采用非菜单式,参数传递方式来进行选择。 例如 #./menu.sh 1 输出时间

2、使用case方式来实现该菜单选择方式

Sudu答案:(难免会有错误,但是可以实现成功)

1、修改menu.sh后得出

#!/bin/bash

if [ $1 -lt 0 -o $1 -gt 3 ]

then

echo “This is not between 0-3.”

else

if [ "$1" == "1" ]

then

echo “`date +%T`”

else

if [ "$1" == "2" ]

then

echo “`uptime | awk -F ‘[,:]‘ ‘{print $7}'`”

else

if [ "$1" == "3" ]

then

echo “`free -m | awk ‘$1==”Mem:”{print $4}'`”

else

exit

fi

fi

fi

fi

 

2、 #!/bin/bash

clear

echo “——————–menu—————–”

echo “1) Show Time”

echo “2) CPU load”

echo “3) Memory free”

echo “0) Exit”

echo “——————————————–”

echo -n “Enter you chose [0-3]:”

read NUM

case $NUM in

1) date +%T;;

2) uptime | awk -F ‘[,:]‘ ‘{print $7}';;

3) free -m | awk ‘$1==”Mem:”{print $4}';;

0) exit ;;

*) echo “This is not between 0-3.” ;;

esac

今天收获还是比较多的。 半个小时的教程看了将近3个小时。

虽然说if…else…fi比较容易理解,但是用case感觉简单很多,呵呵,看个人喜好吧。

 

转载地址:http://muybm.baihongyu.com/

你可能感兴趣的文章
vim中高级技巧
查看>>
centos7+VMware Workstation创建共享文件夹
查看>>
1.10版的Django对应的后台编辑器DjangoUeditor
查看>>
蓝桥杯 【基础练习】 十六进制转十进制
查看>>
关于四则运算表达式分析思路
查看>>
OC基础第三讲
查看>>
数据库发布订阅:发送邮件
查看>>
更改XML文件内容(发票管理软件)
查看>>
(八)Java 修饰符
查看>>
专家揭秘:STM32启动过程全解
查看>>
解决scrapy报错:ModuleNotFoundError: No module named 'win32api'
查看>>
Javascript之类型检测(一)
查看>>
Axios库简单封装
查看>>
以后要把flex用起来
查看>>
获取messagedialog用户点击的按钮
查看>>
【BFS】POJ 3414
查看>>
Copy, cut and paste
查看>>
Adapter的泛型
查看>>
Java编程从0到1系列 目录
查看>>
TypeScript入门知识五(面向对象特性一)
查看>>