最近使用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
參數(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后的字符串
${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文檔