Shell编程之条件判断与流程控制学习笔记

合集下载

BASH学习笔记小结

BASH学习笔记小结

BASH学习笔记⼩结1. Linux 脚本编写基础1.1 语法基本介绍1.1.1 开头程序必须以下⾯的⾏开始(必须⽅在⽂件的第⼀⾏):#!/bin/sh符号#!⽤来告诉系统它后⾯的参数是⽤来执⾏该⽂件的程序。

在这个例⼦中我们使⽤/bin/sh来执⾏程序。

当编辑好脚本时,如果要执⾏该脚本,还必须使其可执⾏。

要使脚本可执⾏:编译 chmod +x filename 这样才能⽤./filename 来运⾏1.1.2 注释在进⾏shell编程时,以#开头的句⼦表⽰注释,直到这⼀⾏的结束。

我们真诚地建议您在程序中使⽤注释。

如果您使⽤了注释,那么即使相当长的时间内没有使⽤该脚本,您也能在很短的时间内明⽩该脚本的作⽤及⼯作原理。

1.1.3 变量在其他编程语⾔中您必须使⽤变量。

在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进⾏声明。

要赋值给⼀个变量,您可以这样写:#!/bin/sh#对变量赋值:注意,等号两边不应有空格a="hello world"# 现在打印变量a的内容:echo "A is:"echo $a有时候变量名很容易与其他⽂字混淆,⽐如:num=2echo "this is the $numnd"这并不会打印出"this is the 2nd",⽽仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。

可以使⽤花括号来告诉shell我们要打印的是num变量:num=2echo "this is the ${num}nd"#这将打印: this is the 2nd ,BASH 中变量定义是不需要的,没有 "int i" 这样的定义过程。

如果想⽤⼀个变量,只要他没有在前⾯被定义过,就直接可以⽤,当然你使⽤该变量的第⼀条语句应该是对他赋初值了,如果你不赋初值也没关系,只不过该变量是空(注意:是 NULL,不是 0 )。

shell编程总结

shell编程总结

shell编程总结
Shell编程是一种基于命令行的脚本编程语言,常用于Linux和Unix系统中。

本文将对Shell编程进行总结,包括以下内容:
1. Shell的基础知识:介绍Shell的定义、历史、发展以及Shell 与Linux的关系。

2. Shell脚本的格式:讲解Shell脚本的格式,包括文件头、变量、注释、命令等。

3. Shell命令:介绍常用的Shell命令,如ls、cd、cp、mv、rm、mkdir、cat等。

4. Shell的流程控制:讲解Shell脚本的流程控制语句,包括if语句、for循环、while循环、case语句等。

5. Shell函数:介绍Shell函数的定义、调用和传参等。

6. Shell的文本处理:讲解Shell脚本中的文本处理命令,如grep、sed、awk等。

7. Shell的正则表达式:介绍正则表达式的定义、语法和常用操作符等。

8. Shell的调试和错误处理:讲解Shell脚本的调试方法和错误处理语句,如set -x、set -e等。

9. Shell脚本的实战:通过实际案例介绍如何使用Shell脚本进行系统管理、日志分析、数据处理等。

通过本文的总结,读者可全面了解Shell编程的基础知识和常用技巧,提高Shell编程的能力。

k shell语法

k shell语法

k shell语法K Shell(ksh)是一种常用的类Unix系统中的shell脚本编程语言。

它是一种解释型语言,具有简单易学的语法和丰富的功能,广泛应用于系统管理、自动化脚本和应用程序开发等领域。

本文将介绍K Shell语法的核心概念和常用命令,帮助您更好地理解和应用K Shell。

K Shell是一种基于Bourne Shell的扩展版本,它提供了更多的功能和语法特性。

K Shell继承了Bourne Shell的基本语法,并在此基础上增加了许多有用的功能和命令。

它支持命令行参数、环境变量、文件操作、流程控制等常见操作,使得编写脚本变得更加容易。

1. 命令行参数K Shell支持命令行参数的传递,可以通过脚本的变量来访问这些参数。

例如,在脚本中定义一个名为$1的变量,它将存储第一个命令行参数的值。

2. 条件判断K Shell支持简单的条件判断语句,可以使用if语句和条件表达式进行条件判断。

它还提供了elif关键字,用于添加更多的条件分支。

3. 循环控制K Shell支持for循环和while循环,用于重复执行一段代码块。

它还提供了break和continue关键字,用于跳出循环或跳过当前迭代。

三、常用命令1. 文件操作命令K Shell提供了许多文件操作命令,如touch、cp、mv、rm等,用于创建、复制、移动和删除文件。

它还提供了test命令,用于进行文件测试和比较。

2. 字符串操作命令K Shell提供了字符串操作命令,如echo、printf、tr等,用于输出文本、格式化输出和替换字符串中的字符。

它还提供了cut和paste命令,用于提取和拼接文件中的字段。

3. 进程管理命令K Shell提供了ps、kill、wait等命令,用于查看当前进程状态、发送信号和等待子进程结束。

它还提供了jobs命令,用于查看和控制后台进程。

四、K Shell高级特性1. 函数定义和调用K Shell支持函数的定义和调用,可以在脚本中封装一段可重用的代码块。

linuxshell编程实验总结

linuxshell编程实验总结

linuxshell编程实验总结Linux Shell编程实验总结在Linux系统中,Shell编程是一种强大的工具,可以帮助用户进行自动化任务、脚本编写和系统管理。

通过学习和实践Shell编程,我深深地体会到了其在提高工作效率和简化任务流程方面的重要性。

在这篇文章中,我将总结我在Linux Shell编程实验中的经验和心得。

一、实验概述在这次Linux Shell编程实验中,我学习并应用了Shell脚本语言,掌握了基本的语法和命令,并通过实验来加深对Shell编程的理解和掌握。

实验的内容包括变量的定义和使用、条件语句的实现、循环结构的应用等。

二、变量的定义和使用在Shell编程中,变量的定义和使用是非常重要的一部分。

通过实验,我学会了如何使用“=”符号来给变量赋值,并可以在后续的命令中使用这个变量。

在实践中,我发现给变量加上$符号可以获取变量的值,并且可以在字符串中插入变量。

这在编写脚本时非常有用,可以将一些可变的部分定义为变量,提高程序的可读性和可维护性。

三、条件语句的实现条件语句在Shell编程中起到了重要的作用,可以根据不同的条件执行不同的命令。

通过实验,我掌握了Shell中常用的条件判断语句,如if语句和case语句。

在编写条件语句时,我注意到要使用适当的比较运算符(如“-eq”表示等于、“-ne”表示不等于等),并在语句块的结尾加上“fi”或“esac”来结束条件语句的定义。

四、循环结构的应用在实践中,我发现循环结构是Shell编程中非常重要的一部分,可以重复执行特定的任务。

通过实验,我掌握了两种常见的循环结构:for循环和while循环。

在编写循环结构时,我注意到要使用适当的循环控制语句,如“break”可以用于跳出循环,“continue”可以用于跳过当前循环中的剩余命令,继续下一次循环。

五、实验心得通过这次实验,我深刻认识到了Shell编程在自动化任务和脚本编写方面的重要性。

Shell编程既可以简化日常工作中的重复性任务,又可以提高工作效率和减少出错的可能性。

如何使用条件判断和逻辑运算进行复杂流程控制

如何使用条件判断和逻辑运算进行复杂流程控制

如何使用条件判断和逻辑运算进行复杂流程控制逻辑运算和条件判断是编程中非常重要的工具,可以帮助我们实现复杂的流程控制。

通过合理的运用条件判断和逻辑运算,我们可以根据不同的情况执行不同的代码块,达到灵活控制程序流程的目的。

本文将探讨如何使用条件判断和逻辑运算进行复杂流程控制。

一、条件判断条件判断是根据不同的条件结果决定程序的执行路径。

在进行条件判断时,我们常用到的运算符有等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等。

下面是一个示例代码:```pythonage = 18if age >= 18:print("您已成年,可以进入网吧。

")else:print("对不起,您未满18岁,禁止进入网吧。

")```在上述代码中,我们根据age的值进行判断,若age大于等于18,则输出"您已成年,可以进入网吧。

";否则,输出"对不起,您未满18岁,禁止进入网吧。

"。

通过这样的条件判断,我们可以根据不同的结果选择不同的执行路径。

二、and、or和not运算符除了基本的条件判断运算符外,我们还可以使用逻辑运算符and、or和not来进行复杂流程控制。

1. and运算符and运算符表示“且”的关系,当多个条件同时满足时,结果为真;否则为假。

下面是一个示例代码:```pythonage = 18grade = 80if age >=18 and grade >= 60:print("您已成年且成绩合格。

")else:print("对不起,您未满18岁或者成绩不合格。

")```在上述代码中,我们需要同时满足两个条件:age大于等于18和grade大于等于60,才能输出"您已成年且成绩合格。

";否则,输出"对不起,您未满18岁或者成绩不合格。

uefi shell 批处理判断命令

uefi shell 批处理判断命令

uefi shell 批处理判断命令
UEFI Shell 提供了一些命令和批处理脚本能力,可以用于在 UEFI 环境下进行一些判断和控制流程的操作。

以下是几个常用的用于判断的命令:
1. if:用于执行条件判断。

语法如下:
```
if condition then
command
else
command
endif
```
其中,condition 是一个判断条件,可以使用等于、大于、小于等比较运算符来进行条件判断。

command 是需要执行的命令。

2. goto:用于跳转到指定标签处继续执行脚本。

语法如下:
```
goto label
```
其中,label 是一个标签名,通常位于脚本的开头或其他位置。

3. :label:定义一个标签。

语法如下:
```
:label
```
4. && 和 ||:用于执行多个命令并根据前一个命令的执行结果判断后续命
令是否执行。

语法如下:
```
command1 && command2
```
如果 command1 执行成功,则执行 command2。

类似地,可以使用 || 来执行 command1 失败时执行 command2。

这些命令和语法可以结合使用,在UEFI Shell 中编写批处理脚本进行条件判断和控制流程操作。

请注意,在不同的 UEFI Shell 版本和厂商实现中,可能存在些许语法差异,建议查阅相关文档和资料以获取更详细和准确的信息。

Shell脚本编写高级技巧使用逻辑运算符实现复杂条件

Shell脚本编写高级技巧使用逻辑运算符实现复杂条件

Shell脚本编写高级技巧使用逻辑运算符实现复杂条件Shell脚本是一种用于自动化任务和批处理的编程语言,通过使用逻辑运算符,可以实现复杂的条件判断和控制流程。

本文将介绍一些高级技巧,帮助读者更好地运用逻辑运算符来编写Shell脚本。

I. 逻辑运算符概述及基本用法逻辑运算符用于对表达式进行比较和判断,并根据结果来控制程序的执行流程。

在Shell中,常用的逻辑运算符包括AND(&&)、OR (||)和NOT(!)。

下面是它们的基本用法:1. AND运算符(&&):AND运算符用于同时判断多个条件是否满足,只有所有条件都为真时,整个表达式的结果才为真。

示例代码如下:```bashif [ condition1 ] && [ condition2 ]; then# do somethingfi```2. OR运算符(||):OR运算符用于判断多个条件是否满足,只有其中某一个条件为真时,整个表达式的结果才为真。

示例代码如下:```bashif [ condition1 ] || [ condition2 ]; then# do somethingfi```3. NOT运算符(!):NOT运算符用于对表达式结果取反,即如果条件为真,则结果为假;如果条件为假,则结果为真。

示例代码如下:```bashif ! [ condition ]; then# do somethingfi```II. 逻辑运算符的高级应用除了基本的用法外,逻辑运算符还可以与其他条件判断语句结合使用,实现更复杂的条件判断和流程控制。

1. 嵌套条件判断:通过嵌套使用逻辑运算符,可以实现多层次的条件判断。

示例代码如下:```bashif [ condition1 ] && [ condition2 ]; thenif [ condition3 ] || [ condition4 ]; then# do somethingfifi```在上述代码中,只有当condition1和condition2同时为真,并且condition3或condition4之一为真时,才会执行“# do something”。

shell if 逻辑与条件

shell if 逻辑与条件

shell if 逻辑与条件(实用版)目录1.Shell if 逻辑与条件的基本概念2.Shell if 逻辑的运用3.Shell if 条件的判断4.Shell if 逻辑与条件的注意事项正文【1.Shell if 逻辑与条件的基本概念】Shell if 是一种在 Unix/Linux 系统中用于条件判断和逻辑操作的命令。

它能够根据指定的条件执行相应的操作,从而实现对程序流程的控制。

Shell if 逻辑与条件主要包括两种:条件判断和逻辑操作。

【2.Shell if 逻辑的运用】Shell if 逻辑主要用于在脚本中实现条件判断和流程控制。

以下是一些常见的 Shell if 逻辑运用:- 判断一个变量的值是否为特定字符串,例如:```if [ "$变量名" = "特定字符串" ]; then# 如果变量的值等于特定字符串,执行这里的操作else# 否则执行这里的操作fi```- 判断一个整数是否满足特定条件,例如:```if [ $整数 -gt 10 ]; then# 如果整数大于 10,执行这里的操作else# 否则执行这里的操作fi```- 根据多个条件进行逻辑判断,例如:```if [ "$条件 1" == "特定值 1" ] && [ "$条件 2" == "特定值 2" ]; then# 如果条件 1 和条件 2 同时满足,执行这里的操作else# 否则执行这里的操作fi```【3.Shell if 条件的判断】在 Shell if 中,我们通常使用 square brackets([])来进行条件判断。

square brackets 中可以包含以下几种形式:- 判断字符串是否相等:`[ 字符串 1 = 字符串 2 ]`- 判断整数是否大于、小于或等于:`[ 整数 1 -gt、-lt 或 -eq 整数 2 ]`【4.Shell if 逻辑与条件的注意事项】在使用 Shell if 逻辑与条件时,需要注意以下几点:- 在进行条件判断时,建议使用双括号([])而不是单括号(" "),以避免因语法错误导致脚本无法正常执行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Shell编程之条件判断与流程控制一、条件判断式语句1-1.概述用来判断是与否,客观的而非主观判断,用于进行基本的管理1-2.按文件类型判断补充:&& 命令1&&命令2 逻辑与(没有数据传递)当命令1正确执行,则命令2才会执行当命令1执行不正确,则命令2不会执行|| 命令1||命令2 逻辑或(没有数据传递)当命令1执行不正确时,命令2才会执行当命令1正确执行时,命令2不会执行#记住蓝色部分两种判断格式:test –e /root/install.log[-e /root/install.log]; e:exist[-d /root] && echo “yes” || echo “no”#第一个判断命令如果正确执行,则打印“yes”,否则打印“no”#注意Linux中0表示命令成功;1,表示命令失败,区别于Python中对象为空数字为0代表假,非0非空代表真。

例子:[root@localhost ~]# lsanaconda-ks.cfg install.log …[root@localhost ~]# [-e /root/install.log][root@localhost ~]# echo $?[root@localhost ~]# [-e /root/install,login] | echo $?[root@localhost ~]# 1[root@localhost ~]# [-e /root/install.log] && echo yes || echo noyes[root@localhost ~]# [-e /root/install.log] && echo yes || echo nono#其实上面是if的单分支语句,注意顺序不可以变化,如果no执行了那么yes也会出现,毕竟正确执行了1-3.按文件权限判断例子:[-w student.txt] && echo “yse” || echo “no”#判断文件是否拥有写权限[root@localhost ~]# ll总用量52-rw-r—r—.1 root root 7690 8月14 16:34 install.log…[root@localhost ~]# [-w install.log] && echo yes || echo noyes#不会判断是所有者有写权限还是所属者有写权限还是其他人有写权限,当然,我们可以用字符截取三个位置的权限分布情况进行分析1-4.两个文件之间的比较测试选项作用文件1 –nt 文件2 判断文件1的修改时间是否比文件2的新(如果新则返回真)n,new;t,time文件1 –ot 文件2 判断文件1的修改时间是否比文件2的旧(如果旧则返回真)o,old;t,time文件1 –ef 文件2 判断文件1是否和文件2的inode号一直,可以理解为两个文件判断是否属于同一个文件,用于判断硬链接的很好的方法,s#因为硬链接的inode号一致,软链接不一样[root@localhost ~]# ln /root/student.txt /tmp/stu[root@localhost ~]# [/root/student.txt –ef /tmp/stu] && echo yes || echo no yes[root@localhost ~]# ll –i262154 -rw-r—r—.2 root root 60 8月14 16:50 student.txt[root@localhost ~]# ll –i /tmp/stu262154 –rw-r—r—.2 root root 60 8月14 16:50 /tmp/stu#源文件和链接文件的inode是一样的.硬链接特征:1、拥有相同的i节点和存储block块(一般4KB一个block),可以看做是同一个文件相当于一个存储文件的不同的获取入口,镜像一样存储double份2、只能对已经存在的文件进行创建3、不能跨分区,不能交叉文件系统进行硬链接的创建4、不能针对目录使用,只能针对文件创建5、删除一个硬链接文件不影响其它有相同inode号的文件.软链接特征:1、类似windows快捷方式,方便打开2、软链接拥有自己的i节点和block块,但是数据块中保存原文件的文件名和i节点号,并没有实际的文件数据,而是原文件的i节点和block块3、lrwxrwxrwx |软链接软链接文件权限都为rwxrwxrwx,查看软链接文件的权限,区别于原文件4、修改任意文件,另一个都改变5、删除原文件,软链接不能使用限制少,而且灵活1-5.两个整数之间比较测试选项作用判断整数1是否和整数2相等(相等为真)整数1 –eq 整数2判断整数1是否和整数2不相等(不相等为真)整数1 –ne 整数2判断整数1是否大于整数2(大于为真)整数1–gt 整数2判断整数1是否小于整数2(小于为真)整数1 –lt 整数2判断整数1是否大于等于整数2(大于等于为真)整数1 –ge 整数2判断整数1是否小于等于整数2(小于等于为真)整数1 –le 整数2例子:[root@localhost ~]# [23 –ge 22] && echo yes || echo noyes#判断23是否大于等于22[root@localhost ~]# [23 –le 22] && echo yes || echo nono#判断23是否小于等于22,no1-6.字符串的判断测试选项作用判断字符串是否为空(为空返回真)-z 字符串判断字符串是否为空(非空返回真)Null-n 字符串判断字符串1是否和字符串2相等(相等返回真)字符串1 == 字符串2判断字符串1是否和字符串2不想等(不想等返回真)字符串1 != 字符串2例子:1).判断字符串是否为空[root@localhost ~]# name=fengj[root@localhost ~]# [-z $name] && echo yes || echo nono#不为空[root@localhost ~]# name=””[root@localhost ~]# [-z $name] && echo yes || echo noyes#为空2).判断字符串是否相等[root@localhost ~]# aa=11[root@localhost ~]# bb=22[root@lo calhost ~]# [“$aa”== ”$bb”] && echo yes || echo nono[root@localhost ~]# [“$aa”eq ”$bb”] && echo yes || echo nono[root@localhost ~]# aa=22[root@localhost ~]# [“$aa”== ”$bb”] && echo yes || echo noyes[root@localhost ~]# [“$aa”eq ”$bb”] && echo yes || echo noyes#判断两个变量的值是否相等,不想等返回假,记得字符串加上双引号“$aa”,没加可能出现错误1-7.多重条件的判断测试选项作用逻辑与,判断1和判断2都成立,最终结果才为真;and 判断1 –a 判断2逻辑或,判断1和判断2只要有一个为真,最终结果就为真;or 判断1 –o 判断2逻辑非,是原始的判断式取反!判断例子1:[root@localhost ~]# aa=11[root@localhost ~]# [-n “$aa”-a “$aa”-gt 23] && echo yes || echo nono#-n “$aa”:判断aa是否为空#-gt “$ss”:判断aa的值是否大于23#-a:逻辑与,因为aa<23,为假,所以结果也为假[root@localhost ~]# [-n “$aa”-a “$aa”-gt 2] && echo yes || echo noyes二、单分支if语句2-1.概述Shell的语法结构不同于一些常见的语言1).目的:掌握语法结构了解Shell的作用分析编程思想2).建立编程思想的方法:熟悉Linux基本命令、规范、语法及Shell语法实际与所学相互结合,了解每个程序的思路,也就是编程思想具体方式:抄写程序并正确运行为程序打上注释删除注释,为代码重新加注释看注释写代码删除代码程序,从头开始写2-2.单分支if语句格式:if [条件判断式];then程序fi或者if [条件判断式]then程序fi#fi来标识结束,finish解释:if语句使用fi结尾,和一般的语言使用大括号结尾不同[条件判断式]就是使用test命令判断,所以中括号和条件判断式之间必须有空格then后面跟符合条件之后执行的程序,可以放在中括号[]之后,用分号”;”分割,也可以换行写入,就不需要分号“;”了1).例子1:判断登录用户是否是root#!/bin/bashtest=$(env | grep “USER”| cut –d “=”-f2)if [ “$test” == root ]thenecho “Current user is root.”fi[root@localhost ~]# lsanaconda-ks.cfg sh ….[root@localhost ~]# cd sh/[root@localhost sh]# lsb1.sh hello.sh read.sh[root@localhost sh]# whoamiroot[root@localhost sh]# vi if_1.sh#!/bin/bashtest=$(env | grep “USER”| cut –d “=”-f2) #提取env环境变量中USER的值#注意,在shell编程中可以先输出结果测试后在接下来完成剩下的代码,如这里可以先#echo $testif [ “$test” == root ]#如果所提取的test值==rootthenecho “Current user is root.”#返回用户比较结果fi~wq[root@localhost sh]# chmod 755 if_1.sh[root@localhost sh]# ./if_1.shCurrent user is root#查看环境变量,截取到USER,然后进行行提取,接下来根据=号进行列提取#补充:|,管道符,命令1 | 命令2,命令1的结果作为命令2的输入项2).例子2:判断分区使用率#!/bin/bash#统计分区使用率rate=$(df –h | grep “/dev/sda3”| awk ‘{print $5}’| cut –d “%”-f1)#把根分区使用率作为变量值赋予rate#df -h:显示分区情况#grep “/dev/sda3”提取行/dev/sda3#awk ‘{print $5}’:把行/dev/sda3第五列$5数据提取出来#cut –d “%”-f1:使用cut 提取“%”前第一列的数字#以上提取出来的就是分区使用率,赋值给rateif [ “$rate” –ge 80 ]thenecho “Warning! /dev/sda3 will full soon”fi~wq[root@localhost sh]# df –h文件系统容量已用可用已用% 挂载点/dev/sda5 18G 1.8G 15G 11% /tmpfs 504M 0 504M 0% /dev/shm/dev/sda1 194M 26M 158M 15% /boot/dev/sda2 2.0G 35M 1.8G 2% /home#h:human,人性化显示[root@localhost sh]# df –h | grep //dev/sda5 18G 1.8G 15G 11% /tmpfs 504M 0 504M 0% /dev/shm/dev/sda1 194M 26M 158M 15% /boot/dev/sda2 2.0G 35M 1.8G 2% /home[root@localhost sh]# df –h | grep /dev/sda5/dev/sda5 18G 1.8G 15G 11% /[root@localhost sh]# df –h | grep /dev/sda5 | awk ‘{print $5}’11%[root@localhost sh]# df –h | grep /dev/sda5 | awk ‘{print $5}’| cut –d “%” –f 1 11[root@localhost sh]# vi if_2.sh#!/bin/bash#统计分区使用率rate=$(df –h | grep “/dev/sda5”| awk ‘{print $5}’| cut –d “%”-f1)if [ “$rate” –ge 10 ]thenecho “Warning! /dev/sda5 will full soon”fi~[root@localhost sh]# chmod 755 if_2.sh[root@localhost sh]# ./if_2.shWarning! /dev/sda5 will full soon三、双分支if语句格式:if [ 条件判断式]then条件成立时,执行的程序else条件不成立时,执行的程序fi补充:接收键盘输入read [选项] [变量名]选项:-p ”提示信息“:在等待read输入的时候,输出提示信息-t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间-n 字符数:read 命令只接收指定的字符数,就会执行-s :隐藏输入的数据,适用于机密信息的输入1.判断输入的是否是同一个目录#!/bin/bash#判断输入的文件是否是一个目录read –t 30 –p “Please input a directory:” dir#read:读取#-t 30 :等待20秒#-p :输出一个提示信息“Please input a directory”#dir:赋给变量dirif [ –d “$dir”] #-d:判断文件是否存在,并且是否为目录文件(是目录则为真)thenecho “yes” #是目录elseecho “no” #不是目录fi[root@localhost sh]# vi if_3.sh#!/bin/bashread –t 30 –p “Please input a directory:” dirif [ –d “$dir”]thenecho “yes”elseecho “no”fi~wq[root@localhost sh]# chmod 755 if_3.sh[root@localhost sh]# ./if_3.shPlease input a directory: /rootyes[root@localhost sh]# ./if_3.shPlease input a directory: sda110no2.判断Apache服务是否启动apache,web服务运维平台:美工+程序+数据库+web服务+系统环境Linux+服务器+域名+IP+网络+…Netcraft:网站信息统计[root@localhost ~]# ps aux#查看系统所有正在运行的应用和服务[root@localhost ~]# ps aux | grep httpdroot 6369 0.0 0.3 11188 3316 ? Ss 17:52 0:00 /usr/sbin/httpd…apache 6372 0.0 0.2 11188 2080 ? S 17:52 0:00 /usr/sbin/httpdroot 6564 0.0 0.0 5960 740 pts/0 s+ 17:52 0:00 grep --color=auto httpd[root@localhost ~]# service httpd stop停止httpd:[确定][root@localhost ~]# ps aux | grep httpdroot 6564 0.0 0.0 5960 740 pts/0 s+ 17:52 0:00 grep --color=auto httpd[root@localhost ~]##依旧包含了httpd相关的grep命令,我们可以取反[root@localhost ~]# service httpd start正在启动httpd: httpd: Could not reliably datermine the server’s fully qualified domain name, using ::1 for ServerName [确定][root@localhost ~]# ps aux | grep httpd | grep –v greproot 6369 0.0 0.3 11188 3316 ? Ss 17:52 0:00 /usr/sbin/httpd…apache 6372 0.0 0.2 11188 2080 ? S 17:52 0:00 /usr/sbin/httpd#没有了grep相关的httpd服务了脚本代码:#!/bin/bashtesh =$(ps aux | grep httpd | grep –v grep)#截取httpd进程,并把结果赋予变量testif [ –n “$test” ]#如果test的值不为空,则执行then中命令#-n 字符串,判断字符串是否为空thenecho “$(date) httpd is ok!”>> /tmp/autostart-acc.logelse/etc/rc.d/init.d/httpd start &>/dev/null#/etc/rc.d/init.d/httpd start :apache标准启动命令#&> :输出重定向,把输出结果不论正确错误输出到指定目录或者文件echo “$(date) restart httpd!!”>> /tmp/autostart-err.logfi补充:输出重定向:类型符号作用标准输出重定向命令>文件以覆盖的方式,把命令的正确输出输出到的文件或设备当中命令>>文件以追加的方式,把命令的正确输出输出到指定的文件或设备当中标准错误输出重定向错误命令2>文件以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中错误命令2>>文件以追加的方式,把命令的错误输出输出到指定的文件或设备当中正确输出和错误输出命令>文件2>&1 以覆盖的方式,把命令的正确和错误输出输出同时保存到指定的文件当中命令>>文件2>&1 以追加的方式,把命令的正确和错误输出输出到指定的文件当中命令&>文件以覆盖的方式,把正确输出和错误输出都保存在同一个文件当中命令&>>文件以追加的方式,把命令的正确和错误输出输出到指定的文件当中命令>>文件1 2>>文件2以追加的方式,把命令的正确输出保存到文件1,把错误的输出保存到文件2通过输出重定向,把输出结果保存起来,可以实现无人值守[root@localhost sh]# vi if_4.sh#!/bin/bashtesh =$(ps aux | grep httpd | grep –v grep)#截取httpd进程,并把结果赋予变量testif [ –n “$test” ]#如果test的值不为空,则执行then中命令#-n 字符串,判断字符串是否为空thenecho “$(date) httpd is ok!”>> /tmp/autostart-acc.log else/etc/rc.d/init.d/httpd start &>/dev/null#/etc/rc.d/init.d/httpd start :apache标准启动命令#&> :输出重定向,把输出结果不论正确错误输出到指定目录或者文件echo “$(date) restart httpd!!”>> /tmp/autostart-err.logfi~wq[root@localhost sh]# chmod 755 if_4.sh[root@localhost sh]# ./if_4.sh18:53 httpd is ok![root@localhost sh]# service httpd stop[root@localhost sh]# ./if_4.sh18:54 restart httpd!!正在启动httpd: httpd: Could not reliably datermine the server’s fully qualified domain name, using ::1 for ServerName [确定]#在apache2.4版本之后启动基本都会报错,只是不认识主机名,但其实仍然启动了[root@localhost sh]# ./if_4.sh18:54 httpd is ok!#我们可以把脚本加入到linux的用户计划,让ta自动运行缺陷:如果你把if_4.sh改成了httpd_if_4.sh之后会发现即使关闭了服务,仍然会提示:“httpd is ok!”[root@localhost sh]# mv if_4.sh httpd_if_4.sh[root@localhost sh]# ./httpd_if_4.shhttpd is ok[root@localhost sh]# service is stop停止httpd:[确定][root@localhost ~]# ps aux | grep httpd | grep –v greproot 6369 0.0 0.3 11188 3316 ? Ss 17:52 0:00 /usr/sbin/httpd…apache 6372 0.0 0.2 11188 2080 ? S 17:52 0:00 /usr/sbin/httpd[root@localhost sh]# ./httpd_if_4.shhttpd is ok#关闭服务依旧显示ok,所以要避免命名时不要带有httpd∙改进:根据端口来判断服务是否启动四、多分支if语句∙格式:if [ 条件判断式1 ]then当条件判断式1成立时,执行程序1elif [ 条件判断式2 ]then当条件判断式2成立时,执行程序2…更多条件判断式与程序…else所有条件都不成立是,执行这部分fi1.简介单分支只有一个判断,然后就直接运行了;双分支有一个符合条件的分支和一个不满足的情况;多分支有多个条件以及对应的程序。

相关文档
最新文档