Archive


Category: shell

  • [shell] $?的意思 dollar sign question mark

    它其實就是找出最後一個被執行的指令返回值,因為一般程式執行成功會返回0 所以$?就能用來做為程式是否執行成功的判斷(大部分的OK) 比如說ls執行成功,所以$?就是0 # ls /tmp yum.log # echo $? 0 拿來做判斷式,判斷某個網路IP是否通暢 #!/bin/bash while : do    ping -c1 -W1 8.8.8.8 &> /dev/null         if [ “$?” == “0” ]; then               echo “UP”;         else               […]

  • [Shell Script] 使用command line將MySQL查詢存成JSON

    本文擷錄自http://jann.is/daily/archives/814-Convert-MySQL-SELECT-to-JSON-using-sed.html 先建立一個mysql_to_json.sh,內容如下 #!/bin/shsed -e ‘s/\t/\”,\”/g’ \ -e ‘s/^/\[\”/’ \ -e ‘s/$/\”\],/’ \ -e ‘1s/\(.*\)/\{\”fields\”:\1\ \”data\”:[/g’ -e ‘$s/.$/\]\}/’ \| tr -d “\n”使用mysql指令產生查詢結果給mysql_to_json.shmysql -e “SELECT * FROM yourdatabase.yourtable” | ./mysql_to_json.sh

  • [shell] 用sed移除xml內的tag

    xml是很常見的格式,但裡面充滿了tag,雖不難看懂,但對資料處理很不方便. 那能不能把tag拿掉呢? 用sed就行了,方法如下 sed ‘s/<[^<]*.[>$]//g;/^$/d’ file.xml > file2.txt 來源檔是file.xml,處理完後輸出到目的檔file2.txt

  • [shell] shell script中亂數產生

    從這個網站拿到了產生的語法,如下 NEW_UUID=$(cat /dev/urandom | tr -dc ‘a-zA-Z0-9’ | fold -w 32 | head -n 1) 當然後面的參數可以再調整  

  • [shell] 2>&1 是什麼意思

    當我初次接觸shell script時,看別人寫的script或者範例時, 2>&1這類型的符號真困擾我. 找到了一篇文章,和各位分享 原文 http://bowen.blog.51cto.com/136148/94406 0 代表鍵盤輸入1 代表螢幕輸出2 代表錯誤輸出  linux shell 中“2>&1”含義 腳本是:       nohup /mnt/Nand3/H2000G  >/dev/null  2>&1  &        對於& 1 更準確的說應該是檔描述符 1,而1 一般代表的就是STDOUT_FILENO,實際上這個操作就是一個dup2(2)調用.他標準輸出到all_result ,然後複製標準輸出到檔描述符2(STDERR_FILENO),其後果就是檔描述符1和2指向同一個檔表項,也可以說錯誤的輸出被合併了.其中0 表示鍵盤輸入 1表示螢幕輸出 2表示錯誤輸出.把標準出錯重定向到標準輸出,然後扔到/DEV/NULL下面去。通俗的說,就是把所有標準輸出和標準出錯都扔到垃圾桶裡面。       command >out.file  2>&1 &       command >out.file是將command的輸出重定向到out.file檔,即輸出內容不列印到螢幕上,而是輸出到out.file文件中。 2>&1 是將標準出錯重定向到標準輸出,這裡的標準輸出已經重定向到了out.file檔,即將標準出錯也輸出到out.file文件中。最後一個& , 是讓該命令在後臺執行。               試想2>1代表什麼,2與>結合代表錯誤重定向,而1則代表錯誤重定向到一個檔1,而不代表標準輸出; 換成2>&1,&與1結合就代表標準輸出了,就變成錯誤重定向到標準輸出.       你可以用             ls 2>1測試一下,不會報沒有2檔的錯誤,但會輸出一個空的檔1;             ls xxx […]

  • [shell] shell script常用的判斷式

    數字比較 [ “$a” -eq “$b” ] 數字相等[ “$a” -ne “$b” ] 數字不相等[ “$a” -gt “$b” ] $a > $b[ “$a” -ge “$b” ] $a >= $b[ “$a” -lt “$b” ] $a < $b[ “$a” -le “$b” ] $a <= $b 字串比較 [ “$a” = “$b” ] $a = $b[ “$a” != “$b” ] $a 不等於 […]

  • [shell] 使用 sed 對所有檔案的內容進行修改

    有時侯會遇到這種情形,當你的資料夾內有許多的檔案,而這些檔案有些可能會包含某一些字眼 這時你可以一個一個檔案打開修改後儲存(一萬個檔案,看你怎麼一個個改).   或者你也可以跟著這麼做 grep -rl “AAA” *|xargs sed -i ‘s/AAA/BBB/g’ 上面命令的做法是先搜尋目錄中有 AAA 的檔案,再使用 sed 將 AAA 替換為 BBB 任務完成!!回基地囉.

  • [shell] awk對log檔進行日期的篩選

    當我們在進行系統檢查或者是故障排除時,觀看Log檔是一個常用的方法,但小弟我常常會有個困擾,Log檔那麼多那麼雜怎麼easy看. 如果你知道某一段時間的話,我們可以先對Log檔進行初步的篩選. 不囉唆!!照做 cat /var/log/message | awk ‘{if (($3>”02:10:00″) && ($3<“02:15:00”)) print}’ 上面的做法是將Log檔中 02:10:00 – 02:15:00 中的Log 篩出, 再慢慢找故障原因吧

  • [shell] awk計算檔案內的數字總和

    如果你逛到這篇文章,記起來.有一天一定會用到 當我們對log進行篩選出資料後,可能會需要加總所有的數字,假設檔案如下 檔名 test.txt 內容 1234 來加總吧..方法如下 cat test.txt | awk ‘{sum += $1} END {print sum}’ 這個式子中的$1是指第一個欄位,如果你一個檔案內有多個數字,可以視需要修改它 如果今天要指定初始值的話,可以改變如下 cat test.txt | awk ‘BEGIN {sum=100} {sum+=$1} END {print sum}’ 這樣就直接指定從100開始加總,也就是100+1+2+3+4=110 再假設如果我們計算的數字是網路流量,我們要把這個數字轉換為MB,則可以改寫成 cat test.txt | awk ‘BEGIN {sum=100} {sum+=$1} END {print sum/1024/1024}’  

  • [Shell] 關於時間的用法

    參考自http://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html 顯示目前的時間 $ date Tue Oct 14 11:20:31 CST 2014 顯示昨天的時間 $ date –date=”1 days ago”$ date –date=”yesterday”$ date –date=”-1 day” Mon Oct 13 11:21:43 CST 2014 顯示明天的時間 $ date –date=”-1 days ago”$ date –date=”next day” Wed Oct 15 11:23:59 CST 2014 未來時間的顯示 date –date=’tomorrow’date –date=’1 day’date –date=’10 day’date –date=’10 week’date –date=’10 month’date –date=’10 year’ […]