<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    Linux shell程序設計(八).雜項
    ?
    ??? 好了,今天是shell變成學習的最后一篇,介紹一下其它的一些相關知識,對于初學者來說,這些只是應該是最迫切需要掌握的,因為一些if、for的語句可以慢慢領悟,但如果不了解這些邊邊角角的內容,別人寫的例子就看不懂,嚴重打擊自信心。所以今天的這一篇是非常重要滴。
    ?
    ?
    一、算術運算
    ?
    ??? bash中的算術運算符命令為let,其語法為:
    ??? let arg ...
    ??? 其中:arg是單獨的算術表達式,基本用法與C語言相同。但不能使用“++”、“--”、“,”;但提供了“**”做方冪運算。
    ?
    ??? let命令可以用(())代替
    ??? 例如:
    ??? let "j=i*6+2" 和 ((j=i*6+2)) 等價
    ?
    ??? let返回結果非0,則返回狀態值為0,否則返回狀態值為1。
    ?
    ??? 注:若有特殊字符,必須有雙引號括起來,比如 let "val=a|b",若不用引號則會認為|是管道符。
    ?
    ?
    二、函數
    ?
    ??? 函數定義的格式為:
    ??? [function]函數名()
    ??? {
    ????? 命令表
    ??? }
    ??? 其中function關鍵字可以默認不寫, 調用函數時直接使用函數名,不用帶(),就像使用一般的命令一樣。
    ?
    ??? 舉例:
    ??? $ 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命令退出函數。后面可帶參數指定退出值。
    ?
    ?
    三、作業控制
    ?
    ??? 在命令行最后加一個“&”就可以使該命令成為后臺作業。
    ??? 如果set命令的monitor選項被打開,即執行了 set -o monitor 命令,則shell進入作業管理。
    ?
    1、jobs命令
    ?
    ??? 不帶參數的jobs命令可以列出當前尚未完成的作業。例如:
    ??? $ jobs
    ????? [2] +Done?????????????? who| wc -cd
    ????? [1] -Stopped(SIGTTOU)?? man ls&
    ?
    ??? 說明:[]中的整數代表作業號,后面的“+”代表當前作業,“-”代表前一個作業。在“+-”后面列出作業狀態,最后則是作業的內容。
    ?
    2、kill命令
    ?
    ??? kill命令可以向指定進程發送終止信號,例如:15表示使作業正常中止運行;9表示立即終止進程。
    ?
    ??? kill -9 1893
    ??? 表示終止PID為1893進程的運行。
    ?
    ??? 注:利用 kill -l 可以列出全部的信號名
    ?
    3、bg和fg命令
    ?
    ??? bg用于把前臺作業切換到后臺,fg則相反。
    ?
    ??? $ bg(fg) %1
    ??? 表示將作業1切換的后臺(前臺)
    ?
    ??? 注:如果不帶參數,表示切換當前job
    ?
    ?
    四、shell內置命令
    ?
    1、eval命令
    ?
    ??? 該命令可以將一個字符串當作命令行來執行,例如:
    ??? $ a="id | cut -f1 -d' '"
    ??? $ eval $a
    ????? uid=0(root)
    ?
    ??? 說明:不用eval命令,那么在執行時就會將“| cut -f1 -d”都作為了id命令的參數。時候eval后,它會把第一遍命令行處理所得的"id", "|", "cut", "-f1", "-d"這些字符串再次進行命令行處理,這次就能正確分析其中的管道了。
    ?
    2、exec命令
    ?
    ??? 格式: exec [ arg ... ]
    ??? 作用:在本shell中執行由參數arg指定的命令,不創建新進程。
    ??? 注意:arg中允許有輸入/輸出重定向。
    ?
    3、hash命令
    ?
    ??? 格式: hash [ -r ] [ name ... ]
    ??? 作用:記住name指定的每個命令在搜索路徑中的位置,[-r]則正好相反。
    ??? 注意:如果沒有參數,則列出所有已記憶的命令信息
    ?
    4、readonly命令
    ?
    ??? 格式:readonly [ name ... ]
    ??? 作用:將name變量標記為只讀
    ??? 注意:若沒有參數,則列出所有只讀變量的清單
    ?
    5、trap命令
    ?
    ??? 格式:trap [ arg ] [ n ] ...
    ??? 作用:當收到后面的[n]信號時,執行arg
    ?
    6、type命令
    ?
    ??? 格式:type [ name ... ]
    ??? 作用:對于每個name,如果作為命令名,是如何被解釋的
    ?
    7、unset命令
    ?
    ??? 格式:unset [ name ... ]
    ??? 作用:刪除name的相應變量或函數
    ??? 注意:PATH、PS1、PS2、MAILCHECK、IFS不能被刪除
    ?
    8、umask命令
    ?
    ??? 格式:umask [-S][mask]
    ??? 作用:將用戶文件創建掩碼設置為mask的值
    ??? 注意:若mask為八進制數,則對應位被置上;若mask為符號,則用來設置權限;若無mask,則顯示當前掩碼;-S以符號形式顯示有關信息(rwx等權限)
    ?
    9、wait命令
    ?
    ??? 格式:wait [n]
    ??? 作用:等待由n(進程ID)指定的進程終止,并報告終止狀態
    ??? 注意:若無參數,則等待所有進程終止。改參數返回值永遠為0
    ?
    ?
    五、腳本調試
    ?
    1、解決環境設置問題
    ?
    ??? ① 無法在其他環境下執行bash腳本。
    ?
    ??? 在shell腳本第一行加上 #!/bin/bash
    ?
    ??? ② PATH環境變量沒有包括“.”,無法識別當前目錄
    ?
    ??? PATH=$PATH:.
    ?
    ??? ③ 腳本文件與已存在命令名字相同
    ?
    ??? 修改腳本名
    ?
    2、解決腳本錯誤
    ?
    ??? 調試shell腳本的方法是打開set命令的-x選項,或者在啟動shell時使用-x選項,則shell進入跟蹤模式。
    ?
    ??? 另一種方法是多使用echo和print命令,這樣可以根據顯示來判斷程序錯誤發生在哪一步。
    ?
    ??? 注:盡量改一次錯誤執行一次,以判斷確切的錯誤發生地。
    ?
    ?
    posted on 2009-01-13 21:19 decode360 閱讀(308) 評論(0)  編輯  收藏 所屬分類: 03.Linux
    主站蜘蛛池模板: 久久九九免费高清视频| 亚洲成人黄色网址| 亚洲伊人成无码综合网| 国产免费人人看大香伊| 黄a大片av永久免费| 热久久精品免费视频| 国内大片在线免费看| 成年男女男精品免费视频网站 | 亚洲av无码一区二区三区不卡| 亚洲伊人成无码综合网| 国产中文在线亚洲精品官网| 亚洲人成网站18禁止一区| 久久久久亚洲精品无码网址 | 嫩草视频在线免费观看| 大香人蕉免费视频75| 国内自产少妇自拍区免费| 国产无遮挡吃胸膜奶免费看视频| 国产片免费在线观看| 亚洲第一区精品日韩在线播放| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 亚洲视频一区二区在线观看| 亚洲国产精品yw在线观看| 精品丝袜国产自在线拍亚洲| 亚洲GV天堂无码男同在线观看 | 亚洲中文久久精品无码| 久久精品国产亚洲AV果冻传媒| 亚洲日韩图片专区第1页| 亚洲欧洲国产视频| 亚洲精品无码专区| 羞羞视频免费网站日本| 十八禁在线观看视频播放免费| 99精品视频免费观看| 无码免费午夜福利片在线| 免费亚洲视频在线观看| 亚洲色无码一区二区三区| 亚洲精品国产手机| 丰满亚洲大尺度无码无码专线| GOGOGO高清免费看韩国| 最近2019免费中文字幕6| 午夜一区二区免费视频| 中文字幕中韩乱码亚洲大片|