Shell脚本编程基础(二)
在 Bash Shell 编程中,数组、运算符和条件判断是非常重要的基础内容。本文将介绍如何在 Bash 中使用一维数组、进行基本的数学运算以及条件判断。
一维数组
Bash Shell 仅支持一维数组,初始化时不需要定义数组的大小。以下是一些基本的数组操作:
定义数组
可以通过下面的方式定义数组:
myArray=(a b c 1 2 5)
访问数组元素
可以使用下标访问数组元素,下标从 0 开始:
echo ${myArray[0]} # 输出: a
echo ${myArray[2]} # 输出: c
获取数组的所有元素
使用 ${myArray[*]}
或 ${myArray[@]}
可以获取数组的所有元素:
echo ${myArray[*]} # 输出: a b c 1 2 5
获取数组长度
使用 ${#myArray[@]}
可以获取数组的长度:
echo ${#myArray[@]} # 输出: 6
基本运算符
Bash 支持基本的算术运算符,包括加、减、乘、除和取余。以下是一些示例:
使用 $(( )) 或 $[ ] 进行算术运算
res=$((4 + 2))
echo $res # 输出: 6res=$((4 + 2 * 3))
echo $res # 输出: 10
expr 命令
expr
用于计算表达式,运算符之间必须有空格:
result=$(expr 2 + 3)
echo $result # 输出: 5result=$(expr 9 - 3)
echo $result # 输出: 6result=$(expr 3 \* 3)
echo $result # 输出: 9result=$(expr 5 / 2)
echo $result # 输出: 2 # 因为 Bash 中的整数除法会截断结果
条件判断
Bash 脚本中经常需要进行条件判断,以下是基本的条件判断操作:
文件和权限判断
#!/bin/bashif [ -e "/opt/oracle/ora.txt" ]; thenecho "ora.txt 文件存在"
elseecho "ora.txt 文件不存在"
fiif [ -w "/opt/oracle/ora.txt" ]; thenecho "ora.txt 有可写权限"
elseecho "ora.txt 没有写权限"
fi
数值比较
if [ 30 -lt 50 ]; thenecho "返回真"
elseecho "false!"
fi
逻辑运算符
if [ "$1" -gt 5 ] && [ "$1" -lt 9 ]; thenecho "$1 它在5和9之间"
elif [ "$1" -lt 5 ] || [ "$1" -gt 8 ]; thenecho "$1 它小于5或者大于8"
fi
示例脚本
以下是两个简单的示例脚本,演示了基本的数组、运算和条件判断操作:
#!/bin/bash# 数组定义与使用
myArray=(10 20 30 40 50)
echo "数组的第一个元素: ${myArray[0]}"
echo "数组的所有元素: ${myArray[*]}"
echo "数组的长度: ${#myArray[@]}"# 基本运算
a=10
b=20var=$(expr $a + $b)
echo "a + b 的结果是: $var"var=$(expr $a - $b)
echo "a - b 的结果是: $var"var=$(expr $a \* $b)
echo "a * b 的结果是: $var"var=$(expr $a / $b)
echo "a / b 的结果是: $var"var=$(expr $a % $b)
echo "a % b 的结果是: $var"
#!/bin/bash# 判断文件是否存在
if [ -e "/opt/oracle/ora.txt" ]; thenecho "ora.txt 文件存在"
elseecho "ora.txt 文件不存在"
fi# 判断文件是否有写权限
if [ -w "/opt/oracle/ora.txt" ]; thenecho "ora.txt 有可写权限"
elseecho "ora.txt 没有写权限"
fi# 比较整数大小
if [ 30 -lt 50 ]; thenecho "30 < 50"
elseecho "false!"
fi# 检查输入参数是否在指定范围内
if [ "$1" -gt 5 ] && [ "$1" -lt 9 ]; thenecho "$1 它在5和9之间"
elif [ "$1" -lt 5 ] || [ "$1" -gt 8 ]; thenecho "$1 它小于5或者大于8"
fi
要点总结:
-
条件判断语法:
[
和]
前后必须有空格,否则会产生语法错误。=
用于比较字符串是否相等。
-
整数比较运算符:
-lt
:小于-gt
:大于-eq
:等于-le
:小于等于-ge
:大于等于
-
逻辑运算符:
&&
表示逻辑与。||
表示逻辑或。
-
文件操作符:
-e
:检查文件是否存在。-r
:检查文件是否有读权限。-w
:检查文件是否有写权限。-x
:检查文件是否有执行权限。-d
:检查是否是目录。-f
:检查是否是普通文件。-s
:检查文件是否为空。