Shell 字符串处理命令与技巧
在 Shell 脚本中,字符串是最常见的数据类型之一。Shell 提供了各种字符串处理命令,如:
echo
: 输出字符串printf
: 格式化输出字符串read
: 读取用户输入并保存到变量中expr
: 对字符串进行数值计算test
/[
: 对字符串进行比较判断 例如,下面的代码演示了如何使用printf
格式化输出字符串:
#!/bin/bash
PI=3.1415926
printf "The value of PI is %10.4f\n" $PI
运行该脚本后将输出:
The value of PI is 3.1416
Shell 脚本处理字符串
Shell 脚本中的字符串可以使用单引号或双引号来定义。使用单引号定义的字符串中的特殊字符将被原样输出,而使用双引号定义的字符串中的特殊字符可以被解释。
字符串变量可以使用 $
符号来引用,如:
#!/bin/bash
STR="hello, world"
echo $STR
运行该脚本后将输出:
hello, world
字符串变量的长度可以使用 ${#variable}
来获取,如:
#!/bin/bash
STR="hello, world"
echo "Length of STR is ${#STR}"
运行该脚本后将输出:
Length of STR is 12
Shell 字符串处理函数
Shell 脚本中可以定义函数来处理字符串。下面是一个简单的函数,用于反转字符串:
#!/bin/bash
reverse() {
local str=$1
local len=${#str}
local rev=""
for (( i=$len-1; i>=0; i-- ))
do
rev="$rev${str:$i:1}"
done
echo "$rev"
}
result=$(reverse "hello, world")
echo $result
运行该脚本后将输出:
dlrow ,olleh
Shell 字符串转数字
在 Shell 脚本中,字符串可以随时转换为数字,如:
#!/bin/bash
STR="123"
NUM=$((STR + 1))
echo "The result is $NUM"
运行该脚本后将输出:
The result is 124
Shell 字符串处理 ASCII 码
在 Shell 脚本中,可以通过使用 printf
命令将字符转换为 ASCII 码或直接输出 ASCII 码。下面的代码演示了如何将字符转换为 ASCII 码:
#!/bin/bash
printf "%d\n" "'A"
运行该脚本后将输出:
65
下面的代码演示了如何输出 ASCII 码所对应的字符:
#!/bin/bash
printf "%c\n" 65
运行该脚本后将输出:
A
Shell 字符串截取
在 Shell 脚本中,可以通过使用 ${parameter:offset:length}
来截取字符串。其中,parameter
是要截取的字符串,offset
是起始位置,length
是要截取的长度。如果 length
未指定,则会一直截取到字符串末尾。
例如,下面的代码演示了如何截取字符串的前 5 个字符:
#!/bin/bash
STR="hello, world"
echo ${STR:0:5}
运行该脚本后将输出:
hello
Shell 字符串替换
在 Shell 脚本中,可以通过使用 ${string/old/new}
或 ${string//old/new}
来替换字符串中的文本。其中,string
是要替换的字符串,old
是要替换的文本,new
是替换后的文本。如果使用的是 ${string/old/new}
,则只会替换第一个匹配的文本;如果使用的是 ${string//old/new}
,则会替换所有匹配的文本。
例如,下面的代码演示了如何将字符串中的所有空格替换为逗号:
#!/bin/bash
STR="hello, world"
echo ${STR// /,}
运行该脚本后将输出:
hello,,world
Shell cut
字符串截取
cut
命令可以用于截取文本文件中的某些字段。例如,下面的代码演示了如何从 /etc/passwd
文件中截取所有用户名:
#!/bin/bash
cut -d: -f1 /etc/passwd
运行该脚本后将输出:
root
daemon
bin
sys
sync
...
Shell 字符串比较相等
在 Shell 脚本中,可以使用 =
或 ==
来比较字符串是否相等。例如,下面的代码演示了如何比较两个字符串是否相等:
#!/bin/bash
STR1="hello, world"
STR2="Hello, World"
if [ "$STR1" = "$STR2" ]
then
echo "The two strings are equal"
else
echo "The two strings are not equal"
fi
运行该脚本后将输出:
The two strings are not equal
可以使用 !=
来比较字符串是否不相等。