shell腳本中字符串的常見操作及"command not found"報錯處理(附源碼)


簡介

昨天在通過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

STR

對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",添加正確的空格才能運行。

if

源碼如下:

#!/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地址點這里,開源中國地址點這里


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM