linux Shell学习笔记第三天

第三天:条件选择

大 纲

应用实例分析

条件测试

if…else…fi

case…in…esac

实现功能菜单

执行脚本后

按1,显示当前时间

按2,显示CPU负载

按3,显示剩余内存

按0,退出脚本

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

分析步骤。

#date +%T

uptime awk截取

free –m

条件测试格式

#test –option obj

#[ -option obj ]

返回结果

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

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

测试的对象分类

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

文件(文件是否存在等)

文本(是否一致)

数字(数值比较)

条件测试的选项

























选项 作用
-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感觉简单很多,呵呵,看个人喜好吧。

每天看来看一节教程就足够了。 看多了头也会晕的。 呵呵。 继续学习吧~

(0)

相关推荐

  • 学习shell脚本之前的基础知识[图文]

    日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位甚至用shell脚本的编写能力来衡量这个linux系统管理员的经验是否丰富.笔者讲这些的目的只有一个,那就是让你认真对待shell脚本,从一开始就要把基础知识掌握牢固,然后要不断的练习,只要你shell脚本写的好,相信你的linux求职路就会轻松的多.笔者在这一章中并不会多么详细的介绍shell脚本

  • linux shell数组深入学习理解

    bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 数组赋值:(1) array=(var1 var2 var3 ... varN)(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)(3) array[0]=var1    arrya[1]=var2    ...    array[n]=varN 计算数组元素个数:${#

  • linux Shell学习笔记第五天

    第五天:函数与任务调度 函数的优势 分而治之f 协同合作 方便管理 维护简单 函数的结构 function 函数名() { 命令1 命令2 命令3 } 函数的参数传递 向函数传递参数就像在一般脚本中使用特殊变量$1,$2,$3-$9一样,函数取得所传参数后将原始参数传回shell脚本,因此最好先在函数内重新设置变量保存所传的参数.这样如果函数有一点错误,就可以通过已经本地化的变量名迅速加以跟踪. 函数文件 当你手机一些经常使用的函数时,可以将之放入函数文件中并将文件载入shell. 文件头应包含

  • shell中case的用法学习笔记

    shell中的case语句: 可以把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪部分代码. 使用格式:case 匹配母板 in模板1 [ | 模板2 ] - ) 语句组 ;;模板3 [ | 模板4 ] - ) 语句组 ;;esaccase语句的匹配是从上往下地匹配顺序.因此,case语句编写的原则是从上往下,模板从特殊到普通.在C语言里,case语句中有default模板,而在shell程序设计中,可能将模板写成*,就可以完成相同的功能. 例1: 复制代码 代码如下: #!

  • Shell脚本编程中常用的数学运算实例

    这部分主要讨论数学相关的shell脚本编程. 加法运算 新建一个文件"Addition.sh",输入下面的内容并赋予其可执行的权限. 复制代码 代码如下: #!/bin/bash echo "Enter the First Number: " read a echo "Enter the Second Number: " read b x=$(expr "$a" + "$b") echo $a + $b =

  • linux Shell学习笔记最后一节,温故与知新

    脚本编写技巧 脚本文件名命名规则 文件名的字符包括 字母.数字."."."_"和"-", 注意:脚本的文件名命名不能以数字开头. 脚本文件名的命名,尽量使用英文单词.词组或短句的缩写. 脚本版本管理: 脚本作用.主版本号.修改次数.shell类型 变量命名规范 变量名可以由数字和字母组成 变量名采用全部英文字符小写的方式 变量名称尽量使用缩写,最好不要超过6个字符 ${变量名} 例:${port},${ipaddr}- 脚本代码注释规范 脚本代码

  • 如何短时间内学好一门语言 shell脚本语言为例

    这里我分享的是学习计算机shell脚本语言的方法,可能你不是在软件行业,但我建议也看看,因为我并没有讲什么技术细节,主要分享的是提炼出的通用性方法,这是对学习任何东西都是有用的. 当然,如果你好奇心足够强的话,建议也可以按照下面的方法来尝试一下,因为科学家已经预测:以后的世界就是一个软件定义的世界,机器人和人工智能会非常普及,而支持它们运行的除了我们看得见的硬件,最关键的就是里面的软件. 所以,学会编程以后就不仅仅只是软件从业人员需要掌握的技能,任何人都可以掌握它,既可以用它来不断提高工作效率,

  • linux Shell学习笔记第一天

    以下是Shell学习1-2天学习笔记 ---------我是分隔符--------- 硬件去执行, 内核与硬件之间进行操作. 命令解析器. shell脚本的组成元素 系统命令 文本处理工具(sort.grep.sed.awk-) 变量 条件判断 环循结构 函数 Shell Scripts Center(SSC) ---------------------------- 非负Grep / awk 几天. 统计Wc Sort 排序 sort|head / sed字段处理 awk 数据区域判断 awk

  • linux Shell学习笔记第四天

    本节课的脚本也同样共享在share中了. 第四天:循环结构 内容大纲: 应用实例分析 for循环 while循环 for循环的原理 达到效果 根据昨天的菜单修改. 选择1.2.3后还会提示是否继续选择的功能.选择4仍然是退出操作. for variable in list list 变量列表池 do command1 command2 done 实例一 forlist.sh #!/bin/bash #for with list for loop in 1 2 3 4 5 定义loop的变量 1

  • shell脚本学习与总结

    1.shell 脚本是区分小写的2.Unix特殊字符有: ( ; $ ? & * () [] ` ' " + 使用其时要进行转义()3.Shell的注释以#开头4.函数的定义Function fuction_name(){Command to execute}调用时直接用function_name.5.控制结构1)If...then语句If [ test_command ]ThenCommandsif2)If...then...else语句If [ test_command ]ThenC

随机推荐