Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          一、算術(shù)運算
          ?
          ??? bash中的算術(shù)運算符命令為let,其語法為:
          ??? let arg ...
          ??? 其中:arg是單獨的算術(shù)表達式,基本用法與C語言相同。但不能使用“++”、“--”、“,”;但提供了“**”做方冪運算。
          ?
          ??? let命令可以用(())代替
          ??? 例如:
          ??? let "j=i*6+2" 和 ((j=i*6+2)) 等價
          ?
          ??? let返回結(jié)果非0,則返回狀態(tài)值為0,否則返回狀態(tài)值為1。
          ?
          ??? 注:若有特殊字符,必須有雙引號括起來,比如 let "val=a|b",若不用引號則會認為|是管道符。
          ?
          ?
          二、函數(shù)
          ?
          ??? 函數(shù)定義的格式為:
          ??? [function]函數(shù)名()
          ??? {
          ????? 命令表
          ??? }
          ??? 其中function關(guān)鍵字可以默認不寫, 調(diào)用函數(shù)時直接使用函數(shù)名,不用帶(),就像使用一般的命令一樣。
          ?
          ??? 舉例:
          ??? $ cat ex17
          ????? #func is a function name
          ????? #it echo the values of variables and arguments
          ????? func()
          ????? {
          ??????? echo "Let's begin now."
          ??????? echo $a $b $c
          ??????? echo $1 $2 $3
          ??????? echo "The end."
          ??????}
          ????? a="Working directory"
          ????? b="is"
          ????? c=`pwd`
          ????? func Welcome You Byby
          ????? echo "Today is `date`"
          ??? $ ./ex17
          ????? Let's begin now.
          ????? Working directory is /home/wangxiaoqi
          ??????Welcome You Byby
          ????? The end.
          ????? Today is .....
          ?
          ??? 另注:可以直接使用return命令退出函數(shù)。后面可帶參數(shù)指定退出值。
          ?
          ?
          三、作業(yè)控制
          ?
          ??? 在命令行最后加一個“&”就可以使該命令成為后臺作業(yè)。
          ??? 如果set命令的monitor選項被打開,即執(zhí)行了 set -o monitor 命令,則shell進入作業(yè)管理。
          ?
          1、jobs命令
          ?
          ??? 不帶參數(shù)的jobs命令可以列出當前尚未完成的作業(yè)。例如:
          ??? $ jobs
          ????? [2] +Done?????????????? who| wc -cd
          ????? [1] -Stopped(SIGTTOU)?? man ls&
          ?
          ??? 說明:[]中的整數(shù)代表作業(yè)號,后面的“+”代表當前作業(yè),“-”代表前一個作業(yè)。在“+-”后面列出作業(yè)狀態(tài),最后則是作業(yè)的內(nèi)容。
          ?
          2、kill命令
          ?
          ??? kill命令可以向指定進程發(fā)送終止信號,例如:15表示使作業(yè)正常中止運行;9表示立即終止進程。
          ?
          ??? kill -9 1893
          ??? 表示終止PID為1893進程的運行。
          ?
          ??? 注:利用 kill -l 可以列出全部的信號名
          ?
          3、bg和fg命令
          ?
          ??? bg用于把前臺作業(yè)切換到后臺,fg則相反。
          ?
          ??? $ bg(fg) %1
          ??? 表示將作業(yè)1切換的后臺(前臺)
          ?
          ??? 注:如果不帶參數(shù),表示切換當前job
          ?
          ?
          四、shell內(nèi)置命令
          ?
          1、eval命令
          ?
          ??? 該命令可以將一個字符串當作命令行來執(zhí)行,例如:
          ??? $ a="id | cut -f1 -d' '"
          ??? $ eval $a
          ????? uid=0(root)
          ?
          ??? 說明:不用eval命令,那么在執(zhí)行時就會將“| cut -f1 -d”都作為了id命令的參數(shù)。時候eval后,它會把第一遍命令行處理所得的"id", "|", "cut", "-f1", "-d"這些字符串再次進行命令行處理,這次就能正確分析其中的管道了。
          ?
          2、exec命令
          ?
          ??? 格式: exec [ arg ... ]
          ??? 作用:在本shell中執(zhí)行由參數(shù)arg指定的命令,不創(chuàng)建新進程。
          ??? 注意:arg中允許有輸入/輸出重定向。
          ?
          3、hash命令
          ?
          ??? 格式: hash [ -r ] [ name ... ]
          ??? 作用:記住name指定的每個命令在搜索路徑中的位置,[-r]則正好相反。
          ??? 注意:如果沒有參數(shù),則列出所有已記憶的命令信息
          ?
          4、readonly命令
          ?
          ??? 格式:readonly [ name ... ]
          ??? 作用:將name變量標記為只讀
          ??? 注意:若沒有參數(shù),則列出所有只讀變量的清單
          ?
          5、trap命令
          ?
          ??? 格式:trap [ arg ] [ n ] ...
          ??? 作用:當收到后面的[n]信號時,執(zhí)行arg
          ?
          6、type命令
          ?
          ??? 格式:type [ name ... ]
          ??? 作用:對于每個name,如果作為命令名,是如何被解釋的
          ?
          7、unset命令
          ?
          ??? 格式:unset [ name ... ]
          ??? 作用:刪除name的相應(yīng)變量或函數(shù)
          ??? 注意:PATH、PS1、PS2、MAILCHECK、IFS不能被刪除
          ?
          8、umask命令
          ?
          ??? 格式:umask [-S][mask]
          ??? 作用:將用戶文件創(chuàng)建掩碼設(shè)置為mask的值
          ??? 注意:若mask為八進制數(shù),則對應(yīng)位被置上;若mask為符號,則用來設(shè)置權(quán)限;若無mask,則顯示當前掩碼;-S以符號形式顯示有關(guān)信息(rwx等權(quán)限)
          ?
          9、wait命令
          ?
          ??? 格式:wait [n]
          ??? 作用:等待由n(進程ID)指定的進程終止,并報告終止狀態(tài)
          ??? 注意:若無參數(shù),則等待所有進程終止。改參數(shù)返回值永遠為0
          ?
          ?
          五、腳本調(diào)試
          ?
          1、解決環(huán)境設(shè)置問題
          ?
          ??? ① 無法在其他環(huán)境下執(zhí)行bash腳本。
          ?
          ??? 在shell腳本第一行加上 #!/bin/bash
          ?
          ??? ② PATH環(huán)境變量沒有包括“.”,無法識別當前目錄
          ?
          ??? PATH=$PATH:.
          ?
          ??? ③ 腳本文件與已存在命令名字相同
          ?
          ??? 修改腳本名
          ?
          2、解決腳本錯誤
          ?
          ??? 調(diào)試shell腳本的方法是打開set命令的-x選項,或者在啟動shell時使用-x選項,則shell進入跟蹤模式。
          ?
          ??? 另一種方法是多使用echo和print命令,這樣可以根據(jù)顯示來判斷程序錯誤發(fā)生在哪一步。
          ?
          ??? 注:盡量改一次錯誤執(zhí)行一次,以判斷確切的錯誤發(fā)生地。
          ?
          ?




          -The End-

          posted on 2009-01-13 21:19 decode360-3 閱讀(323) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 新巴尔虎右旗| 佳木斯市| 合川市| 东台市| 米林县| 罗定市| 怀仁县| 伊金霍洛旗| 白山市| 郯城县| 田林县| 崇信县| 河北省| 黄梅县| 咸丰县| 宁南县| 大厂| 四子王旗| 嵊州市| 集贤县| 沁水县| 阿合奇县| 高平市| 门头沟区| 曲沃县| 咸阳市| 辉县市| 柘荣县| 庄浪县| 当阳市| 霸州市| 南江县| 灌云县| 商南县| 荆州市| 元阳县| 金秀| 柘城县| 万源市| 郎溪县| 肥城市|