Shell使用筆記

最近使用shell命令次數(shù)越來(lái)越頻繁,所以做個(gè)筆記,方便以后的查找。

if語(yǔ)句使用

if [ -f A ] || [ -d B ]; then
  echo "文件存在"
elif [ -d B ]; then
  echo "文件夾存在"
else
  echo "文件不存在"
fi

知識(shí)點(diǎn):
1、其中,流程關(guān)鍵是if、elif、else、fi
2、表示或的條件是用兩個(gè)中括號(hào)括起來(lái)的。

數(shù)組操作

獲取數(shù)組所有元素

${array[*]}
${array[@]}

獲取數(shù)組中元素個(gè)數(shù)

length=${$array[*]}

獲取第一個(gè)元素

first=array[0]

參考:http://c.biancheng.net/cpp/view/7002.html

For循環(huán)使用

對(duì)所有參數(shù)遍歷,可以下面這么寫:

for i in $*;do
    echo $i
done

注:$*代表了所有元素

也可以如c語(yǔ)言一樣寫:

for ((i=0; i<10; i++)); do
    echo $i
done

參考:shell中for循環(huán)總結(jié)

參數(shù)變量

  • $0 當(dāng)前腳本的文件名
  • n 傳遞腳本或函數(shù)參數(shù)。n是一個(gè)數(shù)字,表示第幾個(gè)參數(shù)。例如,第一個(gè)參數(shù)就是1,第二個(gè)參數(shù)是$2
  • $# 傳遞給腳本或函數(shù)的參數(shù)個(gè)數(shù)
  • $* 傳遞給腳本或函數(shù)的所有參數(shù)
  • $@ 傳遞給腳本或函數(shù)的所有參數(shù)
  • $? 上個(gè)命令的退出狀態(tài),或函數(shù)的返回值
  • $$ 當(dāng)前shell進(jìn)程ID。對(duì)于腳本,就是這些腳本所在的進(jìn)程ID。

參考:Shell特殊變量:Shell 0,#, *,@, $?, $$和命令行參數(shù)

shell的判斷條件

判斷文件或目錄是否存在

  • -d 判斷當(dāng)前的路徑是否是目錄
  • -f 判斷路徑是否是文件,判斷文件是否存在

比較字符寫法:

  • -eq 等于
  • -ne 不等于
  • -gt 大于
  • -lt 小于
  • -le 小于等于
  • -ge 大于等于
  • -z 空串
  • = 兩個(gè)字符相等
  • != 兩個(gè)字符不相等
  • -n 非空串

參考: http://wangqiaowqo.iteye.com/blog/1312511

獲取文件名和后綴

file="thisfile.txt"
#獲取文件名
echo "filename: ${file%.*}"
#獲取后綴
echo "extension: ${file##*.}"

shell間接引用

有兩種方式:

一種是使用!

a=123
b=a
echo $b 結(jié)果為a
echo ${!b} 結(jié)果為123

另外一種是eval

a=123
b=a
echo $b 結(jié)果為a
eval c=\${$b}
echo $c 結(jié)果為123

參考:http://blog.csdn.net/hepeng597/article/details/8057692

使用sed進(jìn)行字符串替換

下面語(yǔ)句,將index.html中的gw.js替換為gw.js?100

sed -i "" "s/gw.js/gw.js?100/g" index.html

使用參考:http://blog.csdn.net/dawn_moon/article/details/8547408

shell中,字符串替換

下面語(yǔ)句,將.com替換為.cn

test="baidu.com"
echo ${test//.com/.cn}

參考見(jiàn):http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html

shell時(shí)間使用

首先,獲取當(dāng)前時(shí)間戳

timestamp=$(date +%s)

注意:+前面有個(gè)空格

然后,獲取當(dāng)前時(shí)間

echo $(date +"%F %T")
echo $(date +"%F_%H:%M:%S")

注意:+后面的字符串是格式

參考:
http://bbs.csdn.net/topics/310230625
http://blog.sina.com.cn/s/blog_95b655e001015r51.html

字符串分割

下面一段腳本,將域名用空格分隔成數(shù)組

$domainName="ts.baidu.com pan.baidu.com" 
OLD_IFS="$IFS" 
IFS=" " 
array=($domainName)
IFS="$OLD_IFS"
length=${#array[*]}

參考:http://www.cnblogs.com/jiayy/p/3766286.html

字符串截?。?/h2>
  • ${varible##*string} 從左向右截取最后一個(gè)string后的字符串
  • ${varible#*string} 從左向右截取第一個(gè)string后的字符串
  • ${varible%%string*} 從右向左截取最后一個(gè)string后的字符串
  • ${varible%string*} 從右向左截取第一個(gè)string后的字符串

上面中,*只是一個(gè)通配符可以不要

示例如下:

str="1/2/3"
echo ${str##*/}  #輸出:3
echo ${str#*/} #輸出:2/3
echo ${str%%/*} #輸出:1
echo ${str%/*} #輸出:1/2

參考:http://www.111cn.net/sys/linux/43822.htm

du使用

# 查看當(dāng)前目錄下文件占用磁盤大小
du -sh *
#查看磁盤大小
df -h

查看當(dāng)前文件夾下文件數(shù)量,不包括文件夾

ls -l |grep "^-"|wc -l

遇到if語(yǔ)句中[: too many arguments錯(cuò)誤

是因?yàn)閕f判斷中的變量過(guò)長(zhǎng),只需要在變量加上雙引號(hào)就可以了

http://bluemood.blog.51cto.com/1142811/754832

shell通過(guò)jq操作json

安裝jq,然后通過(guò)jq中的語(yǔ)句進(jìn)行使用
參考:
https://github.com/stedolan/jq/wiki/Installation
jq文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容