簡介
昨天在通過shell腳本實現一個功能的時候,由於對shell處理字符串的方法有些不熟悉導致花了不少時間也犯了很多錯誤,因此將昨日的一些錯誤記錄下來,避免以后再犯。
字符串的定義與賦值
# 定義STR1變量,值為abc
STR1 = "abc"(錯誤寫法)
STR1="abc"(正確寫法)
在編寫java代碼時會考慮到格式化,往往變量定義時會有一些空格或者換行符等,因此在寫shell腳本時也就順手這么寫了,在運行時就會報錯:"command not found",將空格刪除才正常運行。
源碼如下:
#!/bin/bash
# file:testStr.sh
# author:13
# date:2017-07-21
STR1="abc"
echo $STR1
STR2 = "abc"
echo $STR2

對STR1定義是正確的,STR2則為錯誤方式,刪除空格即可。
字符串連接
針對字符串的連接操作shell提供了相當簡單的做法,直接將變量放到一起或用雙引號即可。
#!/bin/bash
# file:testStr.sh
# author:13
# date:2017-07-21
STR1="abc"
STR2="abbcd abc ccc"
#連接STR1和STR2變量並賦值給STR3
STR3=$STR1$STR2
echo $STR3
#連接STR1與"abc" 並賦值給STR4
STR4=$STR1"abc"
echo $STR4
if條件語句中的空格
# 比較兩個字符串是否相等中if語句的寫法
STR1="abc"
STR2="abcd"
if[$STR1=$STR2](錯誤寫法)
if [ $STR1 = $STR2 ](正確寫法)
if語句中如果不添加空格的話,"if["會被識別為一個未知的命令,在運行時就會報錯:"command not found",添加正確的空格才能運行。

源碼如下:
#!/bin/bash
# file:testStr.sh
# author:13
# date:2017-07-21
STR1="abc"
STR2="abcd"
#if[$STR1=$STR2](錯誤寫法)
if [ $STR1 = $STR2 ]
then
echo "相等"
else
echo "不相等"
fi
shell中判斷字符串包含關系的方法
利用grep關鍵字查找
#!/bin/bash
# file:testStr.sh
# author:13
# date:2017-07-21
STR1="abc"
STR2="abbcd abc ccc"
result=$(echo $STR2 | grep "${STR1}")
echo $result
if [[ "$result" != "" ]]
then
echo "包含"
else
echo "不包含"
fi
利用字符串運算符(更簡潔、推薦使用)
#!/bin/bash
# file:testStr.sh
# author:13
# date:2017-07-21
STR1="abc"
STR2="abbcd abc ccc"
if [[ $STR2 =~ $STR1 ]]
then
echo "包含"
else
echo "不包含"
fi
總結
在修復一個項目中的bug時所遇到的一些小問題,最終處理完成並且修復了bug差不多花了四五個小時的時間,也都一一記錄了下來,提醒自己,同樣的,也給其他碰到類似問題的朋友一些參考。
處理的問題是我在github上開源的一個項目,bug被人提出來總要解決掉的,GitHub地址點這里,開源中國地址點這里。
