Shell字符串处理

发布时间:2023-05-19

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

可以使用 != 来比较字符串是否不相等。