shell筆記

1、Mac下shell別名,可以在/etc/bashrc 或者~/.bash_profile添加

alias grep='grep --color=auto'

2蒿偎、變量賦值等號兩邊每空格

A="Hello world"

3俭缓、expr 運算符兩邊有空格

expr 2 + 3

4、條件判斷[ 條件判斷 ] [[ 條件判斷 ]]兩邊有空格

5酥郭、條件判斷中運算符兩邊有空格

[ ! $(id -u) -eq 0 ] && echo "ABC"

5华坦、表達式

#表達式空格可有可無,兩個表達式相等
$((1+3))
$[1+3]

6不从、類C風格((A=1))賦值,((A==B))判等

7惜姐、如果需要在文件中替換多個相同的字符串,需要添加global參數(shù)g椿息,即:

sed -i ".bak" "s/1.*/aa\/bb/g" test.txt
或者
#https://blog.csdn.net/toopoo/article/details/104432196
sed -i ".bak" "s|1.*|aa/bb|g" test.txt

8歹袁、字符串操作

${#string} : $string 的長度
${string:position} : 從$position位置開始的子字符串
${string:position:length} : 從$position位置開始,長度為length的子字符串
${string#substring} : 從頭開始寝优,刪除最短匹配$substring的字符串
${string##substring} : 從頭開始条舔,刪除最長匹配$substring的字符串
${string%substring} : 從結尾開始,刪除最短匹配$substring的字符串
${string%%substring} : 從結尾開始乏矾,刪除最長匹配$substring的字符串
${string/str1/str2} : 使用str2替換第一個匹配的$str1
${string//str1/str2} : 使用str2替換所有匹配的$str1
${string/#str1/str2} : 如果$string的前綴和$str1匹配,用$str2替換$str1
${string/%str1/str2} : 如果$string的后綴和$str1匹配孟抗,用$str2替換$str1


${file-my.file.txt} :假如$file 沒有設定,則使用my.file.txt 作傳回值钻心。(空值及非空值時不作處理) 
${file:-my.file.txt} :假如$file 沒有設定或為空值凄硼,則使用my.file.txt 作傳回值。(非空值時不作處理)
${file+my.file.txt} :假如$file 設為空值或非空值捷沸,均使用my.file.txt 作傳回值摊沉。(沒設定時不作處理)
${file:+my.file.txt} :若$file 為非空值,則使用my.file.txt 作傳回值痒给。(沒設定及空值時不作處理)
${file=my.file.txt} :若$file 沒設定说墨,則使用my.file.txt 作傳回值,同時將$file 賦值為my.file.txt 苍柏。(空值及非空值時不作處理)
${file:=my.file.txt} :若$file 沒設定或為空值尼斧,則使用my.file.txt 作傳回值,同時將$file 賦值為my.file.txt 序仙。(非空值時不作處理)
${file?my.file.txt} :若$file 沒設定突颊,則將my.file.txt 輸出至STDERR。(空值及非空值時不作處理)
${file:?my.file.txt} :若$file 沒設定或為空值潘悼,則將my.file.txt 輸出至STDERR律秃。(非空值時不作處理)

${#var} 可計算出變量值的長度:

9、從文本中讀取字符串命令執(zhí)行

awk '/^TN/{ cmd=$0; system(cmd) }' $SRCROOT/../README.md

10治唤、獲取當前目錄

project_path=$(cd "`dirname "$0"`"; pwd)
#當前目錄
cur_dir=$(pwd)
#上級目錄
highter_dir=$(dirname "$(pwd)")

獲取路徑最后一個名字

project_path=$(cd "`dirname "$0"`"; pwd)
#當前目錄
cur_dir=$(pwd)
#上級目錄
highter_dir=$(dirname "$(pwd)")

11棒动、懶加載代碼

#!/bin/bash
iosBatchLazyCode(){
    
    if test $1 = "UIButton" ; then
        str="[$1 buttonWithType:UIButtonTypeCustom];"
    else
        str="[[$1 alloc]init];"
    fi
  echo -e "
- ($1 *)$2{
    if (_$2 == nil) {
        _$2 = $str
    }
    return _$2;
}" 
}

#追加一行空格
echo -e '\n' >> propertys.txt

#讀取文件存數(shù)組
i=0
while read line
do
    lineStr=$line
    noneSpaceStr=${lineStr// /}
    ARR[$i]=$noneSpaceStr
    let i+=1
done < propertys.txt

#格式化輸出到out.txt
for str in ${ARR[*]}
do
    a=${str#*)}
    b=${a%"*"*}

    c=${str#*"*"}
    d=${c%*;}
    iosBatchLazyCode $b $d 
done >> out.txt 

12、創(chuàng)建文件

RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
> "$RESOURCES_TO_COPY"

13宾添、字符串正則匹配

str1=我是中國人
if [[ "$str1" == 我是* ]]; then
     echo 有前綴
else
     echo 沒有前綴
fi

14船惨、文件重命名

#轉自 https://blog.csdn.net/kwame211/article/details/76019823
0柜裸、用類似 GPRename 這樣的圖形軟件進行批量重命名

#1、刪除所有的 .bak 后綴:
rename 's/\.bak$//' *.bak

#2粱锐、把 .jpe 文件后綴修改為 .jpg:
rename 's/\.jpe$/\.jpg/' *.jpe

#3疙挺、把所有文件的文件名改為小寫:
rename 'y/A-Z/a-z/' *

#4、將 abcd.jpg 重命名為 abcd_efg.jpg:
for var in *.jpg; do mv "$var" "${var%.jpg}_efg.jpg"; done

#5怜浅、將 abcd_efg.jpg 重命名為 abcd_lmn.jpg:
for var in *.jpg; do mv "$var" "${var%_efg.jpg}_lmn.jpg"; done

#6铐然、把文件名中所有小寫字母改為大寫字母:
for var in `ls`; do mv -f "$var" `echo "$var" |tr a-z A-Z`; done

#7、把格式 *_?.jpg 的文件改為 *_0?.jpg:
for var in `ls *_?.jpg`; do mv "$var" `echo "$var" |awk -F '_' '{print $1 "_0" $2}'`; done

#8恶座、把文件名的前三個字母變?yōu)?vzomik:
for var in `ls`; do mv -f "$var" `echo "$var" |sed 's/^.../vzomik/'`; done

#9搀暑、把文件名的后四個字母變?yōu)?vzomik:
for var in `ls`; do mv -f "$var" `echo "$var" |sed 's/....$/vzomik/'`; done

#10. 把.txt變成.txt_bak 的后綴
ls *.txt|xargs -n1 -i{} mv {} {}_bak
# xargs -n1 –i{} 類似for循環(huán),-n1意思是一個一個對象的去處理跨琳,-i{} 把前面的對象使用{}取代自点,mv {} {}_bak 相當于 mv 1.txt 1.txt_bak

find ./*.txt -exec mv {} {}_bak \;  
#這個命令中也是把{}作為前面find出來的文件的替代符,后面的”\”為”;”的脫意符脉让,不然shell會把分號作為該行命令的結尾.


==================================================================

既然要批量替換文件名桂敛,那么肯定得用一個for循環(huán)依次遍歷指定目錄下的每個文件。對于每個文件侠鳄,假如該文件的名稱為name.oldext埠啃,那么我們必須原始文件名中挖出name,再將它與新的文件擴展名newext拼接形成新的文件名name.newext伟恶。依照這樣的思路,就誕生了下面的腳本:
#!/bin/bash
oldext="JPG"
newext="jpg"
dir=$(eval pwd)

for file in $(ls $dir | grep .$oldext)
        do
        name=$(ls $file | cut -d. -f1)
        mv $file ${name}.$newext
        done
echo "change JPG=====>jpg done!"

        下面對針對這個程序作簡單說明:
1.變量oldext和newext分別指定舊的擴展名和新的擴展名毅该。dir指定文件所在目錄博秫;
2.“l(fā)s $dir | grep .$oldext”用來在指定目錄dir中獲取擴展名為舊擴展名的所有文件;
3.在循環(huán)體內先利用cut命令將文件名中“.”之前的字符串剪切出來眶掌,并賦值給name變量挡育;接著將當前的文件名重命名為新的文件名。
        通過這個腳本朴爬,所有照片的擴展名都成功修改即寒。為了使這個腳本更具有通用型,我們可以增加幾條read命令實現(xiàn)腳本和用戶之間的交互召噩。改進版的腳本如下:
#!/bin/bash
read -p "old extension:" oldext
read -p "new extension:" newext
read -p "The directory:" dir
cd $dir

for file in $(ls $dir | grep .$oldext)
        do
        name=$(ls $file | cut -d. -f1)
        mv $file ${name}.$newext
        echo "$name.$oldext ====> $name.$newext"
        done

echo "all files has been modified."
        修改后的腳本可以批量修改任意擴展名母赵。

Shell批量重命名文件名
#!/bin/sh
#替換文件名中的空格
find . -name "* *"|
while read name;do
    na=$(echo $name | tr ' ' '_')
    mv "$name" $na
done

#將文件名替換成1、2具滴、3凹嘲、4、5构韵、6等文件名周蹭,后綴名保持不變(例如test.log -->1.log)
for file in `find . -type f -name "*"`;do 
dirname=`dirname $file`

 i=`expr $i + 1`;
#獲取文件后綴名
 P="${file##*.}"
echo $file $dirname/$i.$P;

mv $file $dirname/$i.$P;
done

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末趋艘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凶朗,更是在濱河造成了極大的恐慌瓷胧,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棚愤,死亡現(xiàn)場離奇詭異抖单,居然都是意外死亡,警方通過查閱死者的電腦和手機遇八,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門矛绘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刃永,你說我怎么就攤上這事货矮。” “怎么了斯够?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵囚玫,是天一觀的道長。 經(jīng)常有香客問我读规,道長抓督,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任束亏,我火速辦了婚禮铃在,結果婚禮上,老公的妹妹穿的比我還像新娘碍遍。我一直安慰自己定铜,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布怕敬。 她就那樣靜靜地躺著揣炕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪东跪。 梳的紋絲不亂的頭發(fā)上畸陡,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音虽填,去河邊找鬼丁恭。 笑死,一個胖子當著我的面吹牛卤唉,可吹牛的內容都是我干的涩惑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼桑驱,長吁一口氣:“原來是場噩夢啊……” “哼竭恬!你這毒婦竟也來了跛蛋?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤痊硕,失蹤者是張志新(化名)和其女友劉穎赊级,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岔绸,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡理逊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了盒揉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晋被。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖刚盈,靈堂內的尸體忽然破棺而出羡洛,到底是詐尸還是另有隱情,我是刑警寧澤藕漱,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布欲侮,位于F島的核電站,受9級特大地震影響肋联,放射性物質發(fā)生泄漏威蕉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一橄仍、第九天 我趴在偏房一處隱蔽的房頂上張望韧涨。 院中可真熱鬧,春花似錦沙兰、人聲如沸氓奈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至暑竟,卻和暖如春斋射,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背但荤。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工罗岖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腹躁。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓桑包,卻偏偏與公主長得像,于是被迫代替她去往敵國和親纺非。 傳聞我的和親對象是個殘疾皇子哑了,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容