shell脚本应用(四)

  1. Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0是表示成功,否则(非0值)表示失败或者异常。使用专门的测试工具-test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0时表示条件成立);


使用test测试命令时,包括以下两种形式。

test  条件表达式

或者

[ 条件表达式 ]

这两种方式的作用完全相同,但通常后一种形式更为常用,注意中括号括起来时至少要用一空格来分隔。



文件测试:

文件测试的常见选项如下:

-d:测试是否为目录(Directory)

-e:测试目录或文件是否存在(Exist)

-f:测试是否为文件(File)

-r:测试当前用户是否有权限读取(Read)

-w:测试当前用户是否有权限写入(Write)

-x:测试当前用户是否有权限执行(EXcute)

执行条件测试后通过预定义变量“$?”可以获得测试命令的返回状态值。从而判断条件是否成立。

例:执行下列操作可测试目录/media/cdrom是否存在,如果返回值$?为0,表示存在此目录否则则不存在,或虽然存在但不是目录。


[[email protected] ~]# [ -d /media/cdrom ]

[[email protected] ~]# echo $?    //查看当前一命令的返回值

1                             //返回1表示条件不成立

[[email protected] ~]# [ -d /media ]

[[email protected] ~]# echo $?     //查看当前一命令的返回值

0                                //返回0表示条件成立



为了更直观的查看测试结果,可以结合命令输出符“&&”和echo命令一起使用,当条件成立时直接输出"yes",其中"&&"表示"而且"的关系,只有当前面的命令成功执行后才会执行后面的命令,否则后面的命令将会被忽略。例:上面的测试结果可以改为:



[[email protected] ~]# [ -d /media/cdrom ]  && echo "yes"  //无输出表示该目录不存在

[[email protected] ~]# [ -d /media ]  && echo "yes"       //输出"yes"表示该目录存在

yes



2.整数值得对比:整数值得比较指的是给定的两个整数值,判断第一个数与第二个数的关系,比如是否大于等于小于第二个数,整数值比较的常用选项如下。

-eq:第一个数等于第二个数

-ne:第一个数不等于第二个数

-gt:第一个数大于第二个数

-lt:第一个数小于第二个数

-le:第一个数小于或等于第二个数

-ge:第一个数大于等于第二个数

例:当判断已经登陆的用户,当小于五个时输出"Too many",可以执行以下操作。



[[email protected] ~]# Unum=`who |wc -l`

[[email protected] ~]# [ $Unum  -lt 5 ]  && echo "Too many"

Too many



再举个例子,当内存大于1024MB时输出以下值:



[[email protected] ~]# FreeCC=$(free -m  | grep "cache:"  | awk  ‘{print $ 4}‘)

[[email protected] ~]# [ $FreeCC -gt 1024 ] && echo ${FreeCC}MB

1648MB



4.字符串比较:字符串比较通常用于检查用户的输入,系统环境等是否满足条件;

=:第一个字符串与第二个字符串相同;

!=:第一个字符串与第二个字符串不同,其中!表示取反;

-z:检查字符串是否为空值;

例:判断当前的语言环境是否为zh.CN;



[[email protected] ~]# echo $LANG

en_US.UTF-8

[[email protected] ~]# [ $LANG != "zh_CN" ]  && echo "not zh.CN"

not zh.CN



再例如,在Shell脚本应用中,经常输入yes或者no来确认某个任务,以下操作展示了确认交互的简单过程:



[[email protected] ~]# read -p "是否覆盖现有文件(yes/no)?" ACK

是否覆盖现有文件(yes/no)?yes

[[email protected] ~]# [ $ACK = "yes" ] && echo “覆盖”

“覆盖”

[[email protected] ~]# read -p "是否覆盖现有文件(yes/no)?" ACK

是否覆盖现有文件(yes/no)?no

[[email protected] ~]# [ $ACK = "no" ] && echo 不覆盖

不覆盖



4.逻辑测试:指的是判断两个或多个条件之间的依赖关系,当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者其中一个成立等情况,需要一个测试的过程,常用的逻辑测试操作如下;

&&:逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值才为0(结果成立);

||:逻辑或,表示“或者”,只要当指定的条件不成立时,整个测试的返回值才为0(结果成立),使用test命令测试时,||可改为"-o";

!:逻辑否,表示“不”,只有当条件不成立时,整个测试命令的返回值为0(但结果是成立的);

例:若要判断当前Linux系统内核版本是否大于2.4,可执行以下操作;



[[email protected] ~]# uname -r

2.6.32-431.el6.x86_64

[[email protected] ~]# Mnum=$(uname -r| awk -F. ‘{print $1}‘)

[[email protected] ~]# Snum=$(uname -r| awk -F. ‘{print $2}‘)

[[email protected] ~]# [ $Mnum -eq 2 ] && [ $Snum -gt 4 ]   && echo "符合要求"

符合要求



下次写点if语句,我这都是基础的,慢慢写点难度大的,我就是个渣渣,哈哈

时间: 2024-08-11 16:48:03

shell脚本应用(四)的相关文章

shell脚本(四)

shell脚本(四) (7)tr命令 #实现字符转换功能 #-c string:反选string字符集,即除了该字符串的所有字符集 #-d string:删除string中出现的所有字符 #-s:删除所有重复出现的字符序列,只保留一个 #删除所有数字 tr -d "[[:digit:]]" < name.txt tr -d 0-9 < name.txt #所有小写字母转换成大写字母 tr  "[a-z]" "[A-Z]" < n

shell脚本第四篇——常用小脚本

shell脚本第四篇--常用小脚本 1.将系统进程按内存占用大小排列显示出来 # ps -e  -o "%C   : %p : %z : %a"|sort -k5-nr 2.将系统进程按CPU占用大小排列显示 # ps -e  -o "%C   : %p : %z : %a"|sort   -nr 或# ps aux --sort -rss 3.查找当前目录下占用为0字节的文件并删除 # find ./ -type f -size 0 -exec rm -rf {}

快速入门shell脚本编写(四)

Lee出品,转载请注明出处 http://blog.csdn.net/hnulwt/article/details/43234977 继续上次学的内容,这次学习 case 语句和 shell的函数概念. case 语句 首先先看看测试程序: 1 #! /bin/sh 2 3 animal=dog 4 5 case "$animal" in 6 cat) 7 echo "cat";; 8 dog) 9 echo "dog";; 10 lion) 1

shell脚本(四)case流程控制和exit命令

exit命令 exit用来控制程序和表达式的流程,一般的编程语言中都会有一个exit函数,在Linuxshell中也属存在的. exit 0 exit status status 用0-255之间的数字表示,返回状态值的同时伴随着脚本的退出(其实就是退出). 就是$? 的值可以使用echo 进行查询 exit命令 在脚本中和在终端上是不一样的. 实验1-判断从键盘输入的值是否为空 1,进入一个子shell,编辑一个文件.(预防执行exit的时候退出终端,所以先执行一个子shell) [[emai

Shell脚本 (四)正则表达式 grep sed awk 工具

正则表达式定义正则表达式,又称正规表达式.常规表达式是使用单个字符串来描述.匹配一系列符合某个句法规则的字符串·正则表达式组成普通字符大小写字母.数字.标点符号及一些其他符号元字符在正则表达式中具有特殊意义的专用字符·基础正则表达式示例查找特定字符利用中括号[]来查找集合字符查找行首^与行尾字符$查找任意一个字符.与重复字符查找连续字符范围{}·基础正则表达式的常见元字符^.$...\..[ ].[^ ].[n1-n2].{n}.{n,}.{n,m}·####查找特定字符####n--表示显示行

shell脚本基础-四种启动方式

1.当前路径启动 ./test.sh 2.绝对路径启动 pwd /data/beijing 'pwd'/test.sh 3.指定解释器执行 sh test.sh bash test.sh 4.shell环境执行 . test.sh source test.sh 原文地址:https://www.cnblogs.com/freeht/p/12132890.html

Shell脚本学习指南 [ 第三、四章 ] 查找与替换、文本处理工具

摘要:第三章讨论的是编写Shell脚本时经常用到的两个基本操作.第四章总共介绍了约30种处理文本文件的好用工具. 第三章 查找与替换 概括:本章讨论的是编写Shell脚本时经常用到的两个基本操作:文本查找.文本替换. 3.1  查找文本 如需从输入的数据文件中取出特定的文本行,主要的工具为grep程序.POSIX采用三种不同grep变体:grep.egrep.fgrep整合为单个版本,通过不同的选项,分别提供这三种行为模式.who | grep -F root上面使用-F选项,以查找固定字符串r

关于shell脚本基础编程第四篇

shell脚本基础编程第四篇本章主要内容:函数 函数 function:             function 名称 { 命令 ; } 或 name () { 命令 ; }           定义 shell 函数.               创建一个以 NAME 为名的 shell 函数.当作为一个简单的命令启用时,           NAME 函数执行调用 shell 的上下文中的 COMMANDs 命令.当 NAME           被启用时,参数作为 $1...$n 被传递

centos shell编程6一些工作中实践脚本 第四十节课

centos   shell编程6一些工作中实践脚本    第四十节课 上半节课 下半节课 f

老李分享:《Linux Shell脚本攻略》 要点(四)

老李分享:<Linux Shell脚本攻略> 要点(四) 1.IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 2.grep用法 //在多级目录中对文本进行递归检索 [[email protected] program_test]# grep "yang" ./ -Rn ./test.txt:6:laoyang./right.txt:1:1 yang man //忽略大小写匹配 [[email protec