您的位置:

Shell字符串处理

一、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

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