Shell编程-6
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章
感谢泷羽sec 团队的教学
视频地址:shell(6)if条件判断与for循环结构_哔哩哔哩_bilibili
一、if条件判断
在Shell脚本中,if
语句用于基于条件的评估来执行不同的代码块。以下是if
语句的基本结构和一些高级用法:
基本结构
if [ 条件 ]; then# 如果条件为真,则执行这里的命令
else# 如果条件为假,则执行这里的命令
fi
条件表达式
-
字符串比较:
"$str1" = "$str2"
:相等。"$str1" != "$str2"
:不等。
-
数值比较:
-eq
:等于。-ne
:不等于。-gt
:大于。-lt
:小于。-ge
:大于等于。-le
:小于等于。
-
文件测试:
-e
:文件或目录存在。-f
:文件存在。-d
:目录存在。-r
:文件可读。-w
:文件可写。-x
:文件可执行。
-
字符串测试:
-z
:字符串长度为零。-n
:字符串长度非零。
高级用法
-
使用
[[ ]]
:- 提供了更多的功能,如正则表达式匹配和模式扩展。
- 自动引用变量,防止单词拆分和文件名扩展。
- 支持
&&
和||
作为逻辑运算符。
-
逻辑运算符:
-a
:逻辑与。-o
:逻辑或。
-
复合命令:
&&
:如果前一个命令成功,则执行下一个命令。||
:如果前一个命令失败,则执行下一个命令。
示例
#!/bin/bash# 字符串比较
if [ "$str1" = "$str2" ]; thenecho "字符串相等"
elseecho "字符串不相等"
fi# 数值比较
if [ $num1 -eq $num2 ]; theneco "数值相等"
elseecho "数值不相等"
fi# 文件测试
if [ -f "filename" ]; thenecho "文件存在"
elseecho "文件不存在"
fi# 字符串测试
if [ -z "$str" ]; thenecho "字符串为空"
elseecho "字符串非空"
fi# 逻辑运算符
if [ $num1 -gt 10 -a $num2 -lt 20 ]; thenecho "$num1 大于 10 且 $num2 小于 20"
fi
注意事项
- 总是使用双引号来引用变量和字符串,以避免空格和特殊字符引起的问题。
- 在
[[ ]]
中使用==
和!=
进行字符串比较,而不是=
和!=
。
二、for循环结构
在Shell脚本中,for
循环是一种用于重复执行一系列命令的控制流结构。它可以根据不同的参数和语法结构来迭代执行。以下是几种常见的for
循环用法:
基本语法
for 变量 in 列表
do# 循环体中的命令
done
迭代列表中的每个元素
for item in element1 element2 element3
doecho "$item"
done
例子:
for str in "hello world"
doecho $str
done
这个脚本的作用是:
-
for str in "hello world"
:这行定义了一个for
循环,其中str
是循环变量,它将依次取得字符串"hello world"
中每个单词的值。注意,如果字符串中包含空格,Shell会将其视为多个单词。 -
do
:这是循环体开始的标志。 -
echo $str
:这是循环体内的命令,它将打印出当前迭代的字符串(即循环变量str
的值)。 -
done
:这是循环体结束的标志。
当这个脚本执行时,它将输出:
hello
world
每个单词占一行,因为for
循环将按照空格将字符串分割成单词,并在每次迭代中将其中一个单词赋值给变量str
。