文章目录
前言
之前我们学习了 Shell的历史与其基本命令,以及Shell的变量与常量,接下来学习其基本运算
基本运算
在 Shell 编程中,除了变量管理和控制流结构外,运算是处理数据的核心部分。Shell 提供了多种运算方式,涵盖了算术运算、字符串操作和文件目录操作等。
算术运算
算术运算是最常用的操作之一。Shell 提供了两种常用方式来进行算术计算:expr
命令和 $(( ))
表达式。
使用 expr 进行算术运算
expr
是一个外部命令,用于进行算术计算。我们可以用它来执行加、减、乘、除和取余等基本运算。注意,expr
要求操作数和运算符之间必须有空格。
# 加法
result=$(expr 5 + 3)
echo $result # 输出:8
# 减法
result=$(expr 10 - 3)
echo $result # 输出:7
# 乘法
result=$(expr 5 \* 4) # 乘号需要转义
echo $result # 输出:20
# 除法
result=$(expr 10 / 2)
echo $result # 输出:5
# 取余
result=$(expr 10 % 3)
echo $result # 输出:1
使用 (( )) 进行算术运算
(( ))
是一种内建的算术扩展方式,支持更直接的运算,且不需要转义符号。它通常被认为是更简洁和高效的方式,尤其是在Shell脚本中。
# 加法
result=$((5 + 3))
echo $result # 输出:8
# 减法
result=$((10 - 3))
echo $result # 输出:7
# 乘法
result=$((5 * 4))
echo $result # 输出:20
# 除法
result=$((10 / 2))
echo $result # 输出:5
# 取余
result=$((10 % 3))
echo $result # 输出:1
使用 bc
进行浮点数运算
Shell 默认不支持浮点数运算。如果需要进行浮点运算,可以使用 bc
(Basic Calculator)工具,它支持浮点数的计算。
# 使用 bc 计算浮点数
result=$(echo "scale=2; 10.5 / 3" | bc)
echo $result # 输出:3.50
字符串操作
Shell 也支持对字符串的操作,常见的操作包括拼接、获取字符串长度、提取子串等。
字符串拼接
在 Shell 中,字符串拼接非常简单,只需要将两个字符串直接放在一起即可。
str1="Hello"
str2="World"
result="$str1 $str2"
echo $result # 输出:Hello World
获取字符串的长度
可以使用 ${#variable}
获取字符串的长度。
str="Hello World"
length=${
#str}
echo $length # 输出:11
提取子串
Shell 允许通过指定起始位置和长度来提取子串。可以使用 ${string:start:length}
来提取子串。
str="Hello World"
substr=${str:0:5} # 从索引 0 开始,提取 5 个字符
echo $substr # 输出:Hello
字符串替换
可以使用 ${string//search/replace}
语法进行全局替换,或者 ${string/search/replace}
进行单次替换。
str="Hello World"
result=${str/World/Shell} # 将第一次出现的 World 替换为 Shell
echo $result # 输出:Hello Shell
# 全部替换
result=${str//o/O} # 替换所有 'o' 为 'O'
echo $result # 输出:HellO WOrld
文件和目录操作
Shell 提供了内建命令 test
和 [ ]
用于对文件和目录进行检查。这些命令可以用于检查文件或目录是否存在、是否具有读取、写入或执行权限等。
文件存在性检查
可以使用 -e
来检查文件是否存在。
if [ -e "file.txt" ]; then
echo "文件存在"
else
echo "文件不存在"
fi
文件类型检查
可以使用 -f
检查文件是否为普通文件,使用 -d
检查是否为目录,使用 -L
检查是否为符号链接。
if [ -f "file.txt" ]; then
echo "这是一个普通文件"
elif [ -d "dir" ]; then
echo "这是一个目录"
elif [ -L "link" ]; then
echo "这是一个符号链接"
else
echo "文件类型不明确"
fi
文件权限检查
可以使用 -r
检查文件是否可读,使用 -w
检查文件是否可写,使用 -x
检查文件是否可执行。
if [ -r "file.txt" ]; then
echo "文件可读"
else
echo "文件不可读"
fi
文件空检查
可以使用 -s
来检查文件是否为空(文件大小大于零)。
if [ -s "file.txt" ]; then
echo "文件非空"
else
echo "文件为空"
fi