Shell基礎Demo 備忘錄

工作中經(jīng)常需要用Shell寫一些腳本用于測試,但是每次寫shell枉侧,我都痛苦不已引瀑,因為shell的語法形式太雜亂,各種括號榨馁,各種$XX憨栽,搞得我每次寫完腳本,都得花大把時間解決語法格式錯誤翼虫。
為了解決這個問題屑柔,提高寫shell的效率,我把一些shell常用的demo蛙讥,總結(jié)出來锯蛀,方便我以及各位讀者查閱哈!

字符串連接

sh_strcat() {
    #method 1
    local str="strcat"
    local str2="helo"
    echo "strcat method1: ${str} ${str2}"

    #method 2
    echo "strcat method2:" ${str} ${str2}
}

獲取字符串長度

sh_strlen() {
    local str="strlen"
    echo "strlen: ${#str}"
}

截取字符串

sh_substr() {
    local substr="hello Meizu!"
    echo -n "substr:"
    #起始下標:截取個數(shù)
    echo ${substr:0:5}
    echo ${substr:6:5}
}

if-else語句格式

sh_if_else() {
    local min=10
    local max=10
    
    # -gt -lt -le -ge

    #if [ ${min} -lt ${max} ]; then
    if ((${min} < ${max})); then
        echo "min < max"

    #elif [ ${min} -gt ${max} ]; then
    elif ((${min} > ${max})); then
        echo "min > max"

    else
        echo "min = max"
    fi
}

for語句格式

sh_for_ctrl_fmt() {
    echo "sh_for_ctrl_format:"
    #for((i=0; i<10; i++)); do
    for i in `seq 10`; do
        echo $i
    done
}

while語句格式

sh_while_fmt() {
    local var=10
    while ((${var} > 0)); do
        var=$((var-1))
        echo $var
    done
}

執(zhí)行shell命令次慢,并將結(jié)果賦給變量

sh_set_val_according2exec_res() {
    var=$(date)
    echo $var
}

echo -e 開啟轉(zhuǎn)義字符

sh_echo_e() {
    echo "echo -e:"
    echo -e "OK \\\\\\\\t END"         #horizonal tab
    echo -e "OK \\\\\\\\n END"         # 換行
    echo -e "OK ccc \\\\\\\\c ccc END" # 不再產(chǎn)生輸出
    echo -e "OK \\\\\\\\b END"         #執(zhí)行退格鍵
    echo -e "OK \\\\\\\\v END \\\\\\\\v eee"  #vertical tab
}

執(zhí)行命令旁涤,拋棄所有輸出

sh_exec_throw_output() {
    ls >/dev/null 2>&1
}

$各種符號意義*

sh_dollar_means() {
    echo "查看shell本身進程ID \\\\\\\\$\\\\\\\\$: $$"
    echo "最后運行的后臺PID \\\\\\\\$!: $!"
    echo "最后運行命令的結(jié)束碼 \\\\\\\\$?: $?"
    echo "所有參數(shù)列表1 \\\\\\\\$*: $*"
    echo "所有參數(shù)列表2 \\\\\\\\$@: $@"
    echo "參數(shù)個數(shù) \\\\\\\\$\\\\\\\\#: $#"
    echo "當前腳本文件名 \\\\\\\\$0: $0"
}

四則運算

sh_operator() {
    echo "sh_operator:"
    local num1=10
    local num2=10

    #res=`expr 2 \\\\\\\\* ${num1}`
    #echo ${res}

    local result_add=$((${num1} + ${num2}))
    echo "add: "$result_add

    local result_minus=$((${num1} - ${num2}))
    echo "minus: "$result_minus

    local result_multi=$((${num1} * ${num2}))
    echo "multi: "$result_multi

    local result_divide=$((${num1} / ${num2}))
    echo "divide: "$result_divide

    local result_mod=$((${num1} % ${num2}))
    echo "mod: "$result_mod

    #######################################

    let result_add++
    echo "result_add++: "${result_add}

    let ++result_add
    echo "++result_add: "${result_add}

    let result_add+=5
    echo "result_add+=5: "${result_add}
    
    let result_add--
    echo "result_add--: "${result_add}

    let --result_add
    echo "--result_add: "${result_add}

    let result_add-=5
    echo "result_add-=5: "${result_add}
}

sh_random

sh_random() {
    local random_num=`awk 'BEGIN{srand();print int(rand()*1000)}'`
    echo "random num:  ${random_num}"
}

EOF INPUT

sh_EOF_INPUT() {
    ncat $ip 6600 << EOF
seekid $position $random_num
EOF
}

strcmp && ||

# -a  ==> 邏輯與
# -o  ==> 邏輯或
#    !  ==> 邏輯非
sh_strcmp() {
    echo "sh_strcmp:"
    local str1='y'
    local str2='z'
    #if (( "x${str1}" == "xy" && "x${str2}" == "xz" ));then
    #if [ "x${str1}" == "xy" -a "x${str2}" == "xz" ];then
    if [[ "x${str1}" == "xy" && "x${str2}" == "xz" ]];then
        echo "sh_strcmp: && success"
    else
        echo "sh_strcmp: && failed"
    fi

    local flag=0
    #if [ ! ${flag} == 0 ]; then
    if (( ! ${flag} == 0 )); then
        echo "! success"
    else
        echo "! failed"
    fi

    #if (( -d "/etc/zsh" && -e /etc/zsh/newuser.zshrc.recommended )); then
    if [ -d "/etc/zsh" -a -e /etc/zsh/newuser.zshrc.recommended ]; then
        echo "exist"
    else
        echo "not exist"
    fi
}

sh_switch_case

sh_switch_case() {
    echo "sh_switch_case:"

    case "$1" in
        start)          echo "case $1";;
        stop)           echo "case $1";;
        install)        echo "case $1";;
        remove)         echo "case $1";;
        upgrade)        echo "case $1";;
    esac
}

輸出pwd

sh_print_pwd() {
    echo "sh_print_pwd:"
    dirname=$(cd "$(dirname "$0")";pwd)
    echo "dirname: "${dirname}
}

awk抓取html

sh_awk_spider_html() {
    echo "sh_awk_spider_html:"
    awk -F'<div class="content"|/ul>' '{for(i=1;i<=NF;i++){if($i~/class="play-img"/){print $i}}}' \\\\\\\\
        ${bt_spider_web_path}plug_xunbo.html|grep -a "h2"|grep -a "${bt_detail_url}" |tail -1 > ${bt_spider_log}xunbo_${kind}_classify.log

    awk -F'<a|/>' '{for(i=1;i<=NF;i++){if($i~/alt/){print $i}}}' ${bt_spider_log}xunbo_${kind}_classify.log  > ${bt_spider_log}classify_${kind}_info.log

    awk -F'[""]' '{print $4}'  ${bt_spider_log}classify_${kind}_info.log > ${bt_spider_log}bt_${kind}_detail_link.log 
    awk -F'[""]' '{print $6}'  ${bt_spider_log}classify_${kind}_info.log > ${bt_spider_log}bt_${kind}_name.log 
    awk -F'[""]' '{print $10}' ${bt_spider_log}classify_${kind}_info.log > ${bt_spider_log}bt_${kind}_pic.log 
}

sed基本使用


#查詢hello關鍵字,打印相應行 
sed -n '/hello/p' cron.txt   

#刪除含hello的行迫像,輸出到屏幕(原文件沒刪除)
sed  '/hello/d' cron.txt  

#跟上一句的區(qū)別:直接修改原文件
sed -i '/hello/d' cron.txt  

#移除空白行:
sed -i '/^$/d' file

#在包含hello關鍵字的指定行前加#號劈愚,注釋該行:
sed -i '/hello/s/^/#/g' /etc/crontabs/root 

#取消#號,取消注釋:
sed -i '/hello/s/^#//' /etc/crontabs/root

如果想了解更多awk和sed這兩條命令闻妓,請參考陳皓大神寫的相關文章~

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末菌羽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子由缆,更是在濱河造成了極大的恐慌注祖,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件均唉,死亡現(xiàn)場離奇詭異是晨,居然都是意外死亡,警方通過查閱死者的電腦和手機舔箭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門罩缴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人层扶,你說我怎么就攤上這事箫章。” “怎么了镜会?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵檬寂,是天一觀的道長。 經(jīng)常有香客問我戳表,道長桶至,這世上最難降的妖魔是什么拿诸? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮塞茅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘季率。我一直安慰自己野瘦,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布飒泻。 她就那樣靜靜地躺著鞭光,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泞遗。 梳的紋絲不亂的頭發(fā)上惰许,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音史辙,去河邊找鬼汹买。 笑死,一個胖子當著我的面吹牛聊倔,可吹牛的內(nèi)容都是我干的晦毙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼耙蔑,長吁一口氣:“原來是場噩夢啊……” “哼见妒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起甸陌,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤须揣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钱豁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耻卡,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年寥院,在試婚紗的時候發(fā)現(xiàn)自己被綠了劲赠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡秸谢,死狀恐怖凛澎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情估蹄,我是刑警寧澤塑煎,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站臭蚁,受9級特大地震影響最铁,放射性物質(zhì)發(fā)生泄漏讯赏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一冷尉、第九天 我趴在偏房一處隱蔽的房頂上張望漱挎。 院中可真熱鬧,春花似錦雀哨、人聲如沸磕谅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膊夹。三九已至,卻和暖如春捌浩,著一層夾襖步出監(jiān)牢的瞬間放刨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工尸饺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留进统,地道東北人虱朵。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓穷躁,卻偏偏與公主長得像檀咙,于是被迫代替她去往敵國和親凰兑。 傳聞我的和親對象是個殘疾皇子梦重,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容