Decode360's Blog

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          一、Shell概述
          ?
          ?
          1、Shell的種類
          ?
          ??? ① sh (Bourne shell):shell的基礎版本,編程方面優秀,但交互性方面不好。
          ??? ② csh (C shell):語法與C類似,交互性更好,但與sh不兼容
          ??? ③ ksh (Korn shell):集合sh和csh有點,并兼容sh
          ??? ④ bash(Bourne Again shell):默認shell,集合csh和ksh有點,但與sh不兼容
          ??? ⑤ 其他:如ashzsh
          ?
          ??? 主要介紹bash的用法,bash主要繼承了csh和ksh的以下優點:
          ?
          ??? * 命令行歷史 (翻閱歷史命令)
          ??? * 命令行編輯 (可用vi修改已輸命令)
          ??? * 命令補全 (Tab)
          ??? * 別名擴展 (建立代表某些命令的名字)
          ?
          2、Shell的特點
          ?
          ??? ① 可建立腳本來組合命令
          ??? ② 提供了文件名擴展字符(*/?/[])
          ??? ③ 可直接使用shell內置命令而無需創建新進程
          ??? ④ 靈活的數據流:通配符、輸入/出重定向、管道線等
          ??? ⑤ 結構化的程序模塊:順序、條件、循環
          ??? ⑥ 后臺執行命令能力:&
          ??? ⑦ 提供可配置環境,用戶可創建、修改命令
          ??? ⑧ 提供高級語言命令,可制作shell腳本
          ?
          3、shell程序示例
          ?
          ??? ① 使用shell最簡單的方法就是直接輸入命令,如:
          ???
          ??? $ ls -l /usr
          ?
          ??? ② 簡單shell腳本
          ?
          ??? $ cat ex1
          ??? date
          ??? pwd
          ??? cd ..
          ?
          ??? 這個腳本表示依次執行腳本中的命令
          ??? 先顯示出日期,再顯示當前工作目錄,再返回上級目錄
          ?
          ??? ③ 帶控制結構的腳本
          ?
          ??? #!/bin/bash
          ??? # If no arguments then listing the current directory.
          ??? # Otherwise listing each subdirectory.
          ?
          ??? if test $# = 0
          ??? then ls
          ??? else
          ??????for? i
          ????? do
          ????????ls -l $i|grep '^d'
          ??????? done
          ??? fi
          ?
          ??? 說明:
          ??? 1) #!/bin/bash 表示下面的腳本用bash編寫,必須用bash進行解釋執行
          ??? 2) #開頭的行為注釋行
          ??? 3) if下面的for循環語句結構
          ?
          4、Shell腳本的執行
          ?
          ??? ① 輸入定向到shell腳本
          ??? $ bash < ex1
          ?
          ??? shell從文件ex1讀取命令并執行,執行完成后返回shell命令狀態,此命令不能帶參數
          ?
          ??? ② 以腳本名作為bash參數
          ??? $ bash ex2
          ????$ . ex2
          ?
          ??? 這種方法可以在后面加參數
          ??? 第二行的“. ex2”表示用當前shell執行該腳本,注意中間要有空格
          ?
          ??? ③ 將shell腳本權限設為可執行
          ??? $ chmod a+x ex2
          ??? $ ex2
          ?
          ??? 可以將shell腳本所在目錄加入到命令搜索目錄,這樣可以像普通命令那樣隨時調用。
          ?
          ?
          ?
          二、命令歷史
          ?
          ?
          ??? bash為每個用戶都維護了一個命令歷史文件:~/.bash_history
          ?
          1、顯示歷史命令
          ?
          ??? ① 不帶參數
          ??? $ history
          ?
          ??? 列出所有的命令,并附有編號。所有命令均是曾經被執行過的。
          ?
          ??? ② 后面帶數字
          ??? $ history 50
          ?
          ??? 表示列出最后的50條命令
          ?
          ??? ③ 刪除所有信息
          ??? $ history -c
          ?
          2、執行歷史命令
          ?
          ??? ① 基本操作
          ??? $ !50
          ?
          ??? 執行序號為50的命令
          ?
          ???② 其他操作
          ?
          ??? !!???????? 重復執行上一條命令,即!-1
          ??? !n???????? 重新執行第n條命令
          ??? !-n??????? 重新執行倒數第n條命令
          ??? !string??? 重新執行最近一條以string開頭的命令
          ??? !?string?? 重新執行最近一條包含string的命令
          ??? !#???????? 執行到現在為止所輸入的整個命令行
          ?
          3、配置歷史命令環境
          ?
          ????① 更改文件路徑
          ??? $ HISTFILE="/home/wxq/.myhistory"
          ?
          ??? 通過更改環境變量HISTFILE來改變存放歷史命令的文件
          ?
          ???② 改變記錄個數
          ??? $ HISTSIZE=600
          ?
          ?
          ?
          三、名稱補全
          ?
          ????在輸入文件名時,使用Tab鍵,會自動進行名稱補全
          ?
          ??? ① 當系統可以唯一確定是哪個目錄或文件時,自動補全
          ??? ② 當系統找到不止一個文件名時,把文件名補全到最后一個相同的字符為止
          ??? ③ 若不能唯一確認時,盡量補全并響鈴提示
          ?
          ??? 注:可以按兩次Tab鍵(或Esc+?),使系統自動提示所有可以匹配的文件。
          ?
          ?
          四、別名
          ?
          ??? ① 創建別名
          ?
          ??? bash可以用alias命令來定義別名。例如:
          ??? $ alias ..='cd ..'
          ??? $ alias cp='cp -i'
          ??? $ alias ll='ls -l'
          ?
          ??? 注意:“=”兩邊不能有空格,如果命令中間有空格,需要用單引號括起來。
          ?
          ??? ② 刪除別名
          ??? $ unalias ll ?
          ?
          ??? 可以通過一下命令刪除所有的別名:
          ??? $ unalias -a
          ?
          ?




          -The End-

          posted on 2009-01-06 22:08 decode360-3 閱讀(562) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 都匀市| 嵩明县| 绍兴县| 株洲县| 内江市| 沙洋县| 定陶县| 吕梁市| 瓮安县| 洛浦县| 合山市| 堆龙德庆县| 富宁县| 伊川县| 吉安县| 嘉义县| 大连市| 垦利县| 峨眉山市| 赤壁市| 文山县| 琼海市| 陇川县| 玉山县| 余江县| 九江县| 温州市| 左云县| 襄汾县| 梁平县| 平顶山市| 荥阳市| 镇原县| 灵山县| 灌云县| 拉孜县| 奉新县| 中江县| 迭部县| 友谊县| 道孚县|