一、构造字符串 直接构造 STR_ZERO=hello STR_FIRST="i am a string" STR_SECOND='success' 重复多次 #repeat the first parm($1) by $2 times strRepeat() { local x=$2 if [ "$x" == "" ]; then x=0 fi local STR_TEMP="" while [ $x -ge 1 ]; do STR_TEMP=`printf "%s%s" "$STR_TEMP" "$1"` x=`expr $x - 1` done echo $STR_TEMP } 举例: STR_REPEAT=`strRepeat "$USER_NAME" 3` echo "repeat = $STR_REPEAT" 二、赋值与拷贝 直接赋值 与构造字符串一样 USER_NAME=terry 从变量赋值 ALIASE_NAME=$USER_NAME 三、联接 直接联接两个字符串 STR_TEMP=`printf "%s%s" "$STR_ZERO" "$USER_NAME"` 使用printf可以进行更复杂的联接 四、求长 求字符数(char) COUNT_CHAR=`echo "$STR_FIRST" | wc -m` echo $COUNT_CHAR 求字节数(byte) COUNT_BYTE=`echo "$STR_FIRST" | wc -c` echo $COUNT_BYTE 求字数(word) COUNT_WORD=`echo "$STR_FIRST" | wc -w` echo $COUNT_WORD 五、比较 相等比较 str1 = str2 不等比较 str1 != str2 举例: if [ "$USER_NAME" = "terry" ]; then echo "I am terry" fi 小于比较 #return 0 if the two string is equal, return 1 if $1 < $2, else 2strCompare() { local x=0 if [ "$1" != "$2" ]; then x=2 localTEMP=`printf "%s\n%s" "$1" "$2"` local TEMP2=`(echo "$1"; echo "$2") |sort` if [ "$TEMP" = "$TEMP2" ]; then x=1 fi fi echo $x } 六、测试 判空 -z str 判非空 -n str 是否为数字 # return 0 if the string is num, otherwise 1 strIsNum() { local RET=1 if [ -n "$1" ]; then local STR_TEMP=`echo "$1" | sed 's/[0-9]//g'` if [ -z "$STR_TEMP" ]; then RET=0 fi fi echo $RET } 举例: if [ -n "$USER_NAME" ]; then echo "my name is NOT empty" fi echo `strIsNum "9980"` 七、分割 以符号+为准,将字符分割为左右两部分 使用sed 举例: 命令 date --rfc-3339 seconds 的输出为 2007-04-14 15:09:47+08:00 取其+左边的部分 date --rfc-3339 seconds | sed 's/+[0-9][0-9]:[0-9][0-9]//g' 输出为 2007-04-14 15:09:47 取+右边的部分 date --rfc-3339 seconds | sed 's/.*+//g' 输出为 08:00 以空格为分割符的字符串分割 使用awk 举例: STR_FRUIT="Banana 0.89 100" 取第3字段 echo $STR_FRUIT | awk '{ print $3; }' 八、子字符串 字符串1是否为字符串2的子字符串 # return 0 is $1 is substring of $2, otherwise 1 strIsSubstring() { local x=1 case "$2" in *$1*) x=0;; esac echo $x } |