#SHELL分享
##shell簡介
shell是一種可以直接操作Linux 接口的腳本語言
#!/bin/bash
echo hello world!
##shell語法
####變量: $, unset
#!/bin/bash
your_name="ZHAOJIAN"
echo $your_name
unset your_name
echo $your_name
###變量類型:
1. 局部變量
2. 環(huán)境變量: *export* 設(shè)置環(huán)境變量
3. shell變量
###字符串:"", ''
####拼接字符串
your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
####獲取字符串長度
string="abcd"
echo ${#string} #輸出 4
####提取子字符串
string="runoob is a great site"
echo ${string:1:4}
###參數(shù):
* $0--文件名
* $n--第幾個參數(shù)
* $#--參數(shù)個數(shù)
* $?--上一個退出碼
###test:條件
###if
#!/bin/bash
a=30
b=200
if [ $a? -eq? $b ]
then
? echo "a 等于 b"
elif [ $a -gt? $b ]
then
? echo "a 大于 b"
elif [ $a -lt $b ]
then
? echo "a 小于 b"
else
? echo "沒有符合的條件"
fi
整數(shù)比較:
? ? -eq? ? ? 等于,如:if [ "$a" -eq "$b" ]
? ? -ne? ? ? 不等于,如:if [ "$a" -ne "$b" ]
? ? -gt? ? ? 大于,如:if [ "$a" -gt "$b" ]
? ? -ge? ? ? 大于等于,如:if [ "$a" -ge "$b" ]
? ? -lt? ? ? 小于,如:if [ "$a" -lt "$b" ]
? ? -le? ? ? 小于等于,如:if [ "$a" -le "$b" ]
? ? <? ? ? 小于(需要雙括號),如:(("$a" < "$b"))
? ? <=? ? ? 小于等于(需要雙括號),如:(("$a" <= "$b"))
? ? >? ? ? 大于(需要雙括號),如:(("$a" > "$b"))
? ? >=? ? ? 大于等于(需要雙括號),如:(("$a" >= "$b"))
字符串比較:
? ? =? ? ? 等于,如:if [ "$a" = "$b" ]
? ? ==? ? 等于,如:if [ "$a" == "$b" ], 與=等價
? ? ? ? ? ? ? 注意:==的功能在[[]]和[]中的行為是不同的,如下:
? ? ? ? ? ? ? 1 [[ $a == z* ]]? ? # 如果$a以"z"開頭(模式匹配)那么將為true
? ? ? ? ? ? ? 2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么結(jié)果為true
? ? ? ? ? ? ? 3
? ? ? ? ? ? ? 4 [ $a == z* ]? ? ? # File globbing 和word splitting將會發(fā)生
? ? ? ? ? ? ? 5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么結(jié)果為true
? ? !=? ? ? 不等于,如:if [ "$a" != "$b" ], 這個操作符將在[[]]結(jié)構(gòu)中使用模式匹配.
? ? <? ? ? 小于,在ASCII字母順序下.如:
? ? ? ? ? ? ? if [[ "$a" < "$b" ]]
? ? ? ? ? ? ? if [ "$a" \< "$b" ]? ? 在[]結(jié)構(gòu)中"<"需要被轉(zhuǎn)義.
? ? >? ? ? 大于,在ASCII字母順序下.如:
? ? ? ? ? if [[ "$a" > "$b" ]]
? ? ? ? ? if [ "$a" \> "$b" ]? 在[]結(jié)構(gòu)中">"需要被轉(zhuǎn)義.
? ? -z? ? ? 字符串為"null".就是長度為0.
? ? -n? ? ? 字符串不為"null"
###for 循環(huán)
for var in item1 item2 ... itemN
do
? ? command1
? ? command2
? ? ...
? ? commandN
done
###while 循環(huán)
while condition
do
? ? command
done
##常用命令
* cat 打印文件內(nèi)容 -n 顯示行號
*? grep
*? | 管道
*? -v 反選
*? egrep "正則"
*? wc -l 統(tǒng)計行數(shù)
*? find *查找文件*
*? 測試,計算一下我們一共有多少個Activity文件
*? awk *計算和數(shù)據(jù)處理*
awk -F '\/' '{print $(NF)}'
*? md5
*? diff -ac
*? sed *修改文本*
sed -i "" 's/buildAsPkg=false/buildAsPkg=true/g' ${settings_gradle}
*? pwd
*? cd ~|-|..
*? cp
*? mv
*? mkdir
*? touch
*? top
*? rm
*? chomd 777
*? echo *輸出*
*? printf 格式化輸出
*? eval *執(zhí)行命令*
*? exit n 退出碼
*? $? 上個shell的退出碼
*? du -sh 查看文件大小
*? result = \`command` 獲取程序的運(yùn)行結(jié)果
*? curl 簡單的http請求 -H -d -F
*? ps -ef 查看進(jìn)程
*? \> 輸出重定向
*? \& 程序掛起
*? sort 排序 -u 去重排序
*? head 從頭讀文件
*? tail 從某位讀(主要用來跟日志的)
*? uniq 去重
*? read value: 提示用戶輸入,并將輸入賦值給變量
*? ssh 登錄服務(wù)器
*? sudo
*? ping
*? java -jar/-version
*? adb shell 在android機(jī)器上執(zhí)行shell 命令
*? input 模擬點(diǎn)擊
*? monkey
*? pm list packages
*? ps -ef
*? logcat
*? man 查看命令如何使用,或者一般命令有-h, -help
*? history 最近使用的命令
*? tab 自動補(bǔ)齊
*? dirname/basename 路徑操作