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

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

时间: 2024-11-25 02:30:57

linux Shell学习笔记第三天_其它的相关文章

linux Shell学习笔记第五天_其它

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

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 i

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学习笔记最后一节,温故与知新_其它

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

linux Shell学习笔记第二天_其它

变量 获取本机主机名 #hostname 获取本系统版本号 #uname -r 获取cpu类型 获取cpu的工作频率 cat /proc/cpuinfo 获取内存使用情况 #free -m 获取硬盘使用情况 #df 变量类型及变量操作 本地变量(一般所指) 本地变量只存在用户当前shell中,当用户退出当前shell或开器一个新的shell,所设置的变量将会不存在 设置变量 #变量名=变量值 显示变量 #echo ${变量名} 假设a=1 显示则 echo ${a} 环境变量(用的非常少) 环境

Jquery 学习笔记(三)240多个jQuery插件

Jquery 学习笔记(三) -240多个jQuery插件 2009年11月30日二 作者:   邦畿千里   概述 jQuery 是继 prototype 之后又一个优秀的 Javascript 框架.其宗旨是-写更少的代码,做更多的事情.它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不及的,它兼容 CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+). jQuery 是一个快速的,简洁的 javaScript

Mysql学习笔记(三)运算符和控制流函数

原文:Mysql学习笔记(三)运算符和控制流函数 本章学习内容: 1.操作符 2.控制流程函数   操作符: i.圆括号.. 简单的介绍一下圆括号,圆括号的使用的目的是规定计算表达式的顺序...这个想必大家都熟悉例如  mysql>select 1+(2*3) mysql>select (1+2)*3 ii.比较运算符. 比较运算符就比较多了,并且也很常用..比如   = 等于: mysql> SELECT 1 = 0; -> 0 mysql> SELECT '0' = 0;

Linux命名空间学习教程(三) PID

本文讲的是Linux命名空间学习教程(三) PID,[编者的话]Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源.而 LXC所实现的隔离性主要是来自内核的命名空间, 其中pid.net.ipc.mnt.uts 等命名空间将容器的进程.网络.消息.文件系统和hostname 隔离开.本文是Linux命名空间系列教程的第三篇,重点介绍PID命名空间.DockerOne在撸代码的基础上进行了校对和整理. 继上一篇关于IPC namespac

Active Record学习笔记(三):处理One-To-Many映射

本来打算一口气把Castle.ActiveRecord的学习笔记写完,没想到前段时间太忙了,一放就放了半个月,现在继续未完成的学习笔记吧! 这篇学习笔记主要介绍ActiveRecord如何处理one-to-many的映射,对于many-to-one映射只需把one-to-many的处理过程反过来就可以了.本文涉及了两个实体类User.Address,两个类的关系是一对多,下面是这两个类的实体关系图: 主要内容: 1.编写数据库 2.HasMany和BelongsTo属性说明 3.编写实体类 4.