十、shell学习笔记-基础shell编程

本文详细介绍脚本编程的基础知识,包括脚本的定义、条件测试、字符串和数值测试、控制流结构如if语句、case语句、循环结构等。通过本文,读者可以了解如何创建、测试和控制脚本,掌握脚本编程的基本技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、脚本的定义

脚本不是复杂的程序,它是按行解释的。脚本第一行总是以 #!/bin/sh开始,这段脚本通知shell使用系统上的Bourne shell解释器。
脚本都可能有注释,加注释需要此行的第一个字符为#,解释器对此行不予解释。
脚本从上到下执行,运行脚本前需要增加其执行权限。确保正确建立脚本路径,这样只 用文件名就可以运行它了。

2、条件测试

Test命令用于测试字符串,文件状态和数字。
test一般两种格式,即:

test condition
或
[condition]
例:
test -w filename.txt 检测文件是否可写
[ -w filename.txt ] 检测文件是否可写
使用方括号时,要注意在条件两边加上空格

- d 目录 
- s 文件长度大于0、非空 
- f 正规文件
- w 可写 
- L 符号连接 
- u 文件有suid位设置 
- r 可读 
- x 可执行

使用两种方法测试文件是否可写并用最后退出状态测试是否成功(echo $?)。记住, 0表示 成功,其他为失败。
测试文件状态是否为OK,但是有时要比较两个文件状态。 shell提供三种逻辑操作完成此功能。
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。
例:

[ -w test.txt -a -d /etc/app ] 两个条件为真则为真
echo $?
0        为真

字符串测试是错误捕获很重要的一部分,特别在测试用户输入或比较变量时尤为重要。 字符串测试有5种格式。

test "string"
test string_operator "string"
test "string" string_operator "string"
[ string_opertor "string" ] 
[ "string" string_opertor "string" ]
string_operator可为: 
=     两个字符串相等。 
!=   两个字符串不等。 
-z    空串。 
-n    非空串

测试数值可以使用许多操作符,一般格式如下:

[ "number" numeric_operator "number" ]
numeric_operator可为: 
-eq   数值相等。 
-ne   数值不相等。 
-gt   第一个数大于第二个数。 
-lt   第一个数小于第二个数。 
-le   第一个数小于等于第二个数。 
-ge   第一个数大于等于第二个数。 

expr命令一般用于整数值,但也可用于字符串。一般格式为:

expr argument operator argument
operator = [+、-、*、/]
使用乘号时,必须用反斜线屏蔽其特定含义。因为 shell可能会误解显示星号的意义。

控制流结构

所有功能脚本必须有能力进行判断,也必须有能力基于一定条件处理相关命令。
在书写正确脚本前,大概讲一下退出状态。任何命令进行时都将返回一个退出状态。如 果要观察其退出状态,使用最后状态命令:

$ echo $?

要退出当前进程,shell提供命令exit,一般格式为:

exit n

如果只在命令提示符下键入exit,假定没有在当前状态创建另一个shell,将退出当前shell。 如果在脚本中键入exit,shell将试图(通常是这样)返回上一个命令返回值。有许多退出脚本值,但其中相对于脚本和一般系统命令最重要的有两种,即: 退出状态0 退出成功,无错误。 退出状态1 退出失败,某处有错误。
if、then、else语句提供条件测试。测试可以基于各种条件。例如文件的权限、长度、数 值或字符串的比较。这些测试返回值或者为真( 0),或者为假(1)。基于此结果,可以进行 相关操作。在讲到条件测试时已经涉及了一些测试语法。
case语句允许匹配模式、单词或值。一旦模式或值匹配,就可以基于这个匹配条件作其他声明。
for 循环 每次处理依次列表内信息,直至循环耗尽。
Until 循环 此循环语句不常使用,until循环直至条件为真。条件部分在循环末尾部分。
While 循环 while循环当条件为真时,循环执行,条件部分在循环头。 流控制语句的任何循环均可嵌套使用,例如可以在一个 for循环中嵌入另一个for循环。
if语句测试条件,测试条件返回真(0)或假(1)后,可相应执行一系列语句。 if语句结构对错误检查非常有用。其格式为:

if  条件1 
then   命令1 
elif   条件2 
then  命令2 
else  命令3
fi 

使用if语句时,必须将then部分放在新行,否则会产生错误。如果要不分行,必须使用命令分隔符。

if  条件;then 命令
fi
grep "" filename.txt > dev/null 2 > &1

有时需要知道脚本运行是交互模式(终端模式)还是非交互模式(cron或a t)。脚本也许需要这个信息以决定从哪里取得输入以及输出到哪里,使用test命令并带有- t选项很容易确认 这一点。如果test返回值为1,则为交互模式。

下一个if语句有可能是使用最广泛的: if  条件
then 命令1
else 命令2
fi 使用if语句的else部分可在条件测试为假时采取适当动作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值