十年專注于品牌網站建設 十余年專注于網站建設_小程序開發_APP開發,低調、敢創新、有情懷!
      南昌百恒網絡微信公眾號 掃一掃關注
      小程序
      tel-icon全國服務熱線:400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡微信小程序

      百恒網絡

      南昌百恒網絡

      dash shell的特性

      百恒網絡 2017-04-08 7052

      雖然bash shell是Linux發行版中最廣泛使用的shell,但它并不是唯一的選擇。現在基本已經了解了標準的Linux bash shell,知道了能用它做什么,是時候看看Linux世界中的其他一些shell了。接下來南昌APP制作開發公司小編將會介紹另外兩個可能會碰到的shell,以及它們與bash shell有什么區別。
      ? ? ? ?1.什么是 dash shell
      ? ? ? ?Debian的dash shell的歷史很有趣。它是ash shell的直系后代,而ash shell則是Unix系統上原來的Bourne shell的簡化版本。Kenneth Almquist為Unix系統開發了一個Bourne shell的簡化版本,并將它命名為Almquist shell,縮寫為ash。ash shell最早的版本體積極小、速度奇快,但缺乏許多高級功能,比如命令行編輯或命令使用記錄功能,這使它很難用作交互式shell。
      ? ? ? ?NetBSD Unix操作系統移植了ash shell,直到今天依然將它用作默認shell。NetBSD開發人員對ash shell進行了定制,增加了一些新的功能,使它更接近Bourne shell。新功能包括使用emacs
      ? ? ? ?和vi編輯器命令進行命令行編輯,利用歷史命令來查看先前輸入的命令。ash shell的這個版本也被FreeBSD操作系統用作默認登錄shell。
      ? ? ? ?Debian Linux發行版創建了它自己的ash shell版本(稱Debian ash,或dash)以供自用。dash復制了ash shell的NetBSD版本的大多數功能,提供了一些高級命令行編輯能力。
      ? ? ? ?但令人不解的是,實際上dash shell在許多基于Debian的Linux發行版中并不是默認的shell。由于bash shell在Linux中的流行,大多數基于Debian的Linux發行版將bash shell用作普通登錄shell,而只將dash shell作為安裝腳本的快速啟動shell,用于安裝發行版文件。
      ? ? ? ?流行的Ubuntu發行版是例外。這經常讓shell腳本程序員摸不清頭腦,給Linux環境中運行shell腳本帶來了很多問題。Ubuntu Linux發行版將bash shell用作默認的交互shell,但dash shell用作默認的 /bin/sh? shell。這個“特性”著實讓shell腳本程序員一頭霧水。
      ? ? ? ?每個shell腳本的起始行都必須聲明腳本所用的shell。在bash shell腳本中,我們一直用下面的行。
      #!/bin/bash
      ? ? ? ?它會告訴shell使用位于/bin/bash的shell程序來執行腳本。在Unix世界中,默認shell一直是/bin/sh。許多熟悉Unix環境的shell腳本程序員會將這種用法帶到他們的Linux shell腳本中。
      #!/bin/sh
      ? ? ? ?在大多數Linux發行版上,/bin/sh文件是鏈接到shel程序/bin/bash的一個符號鏈接。這樣你就可以在無需修改的情況下,輕松地將為Unix Bourne shell設計的shell腳本移植到Linux環境中。
      ? ? ? ?很遺憾,Ubuntu Linux發行版將/bin/sh文件鏈接到了shell程序/bin/dash。由于dash shell只含有原來Bourne shell中的一部分命令,這可能會(而且經常會)讓有些shell腳本無法正確工作。
      ? ? ? ?以后將逐步了解dash shell的基礎知識以及它跟bash shell的區別。如果你編寫的bash shell腳本可能要在Ubuntu環境中運行,了解這些內容就尤其重要。
      ? ? ? ?2.dash shell 的特性
      ? ? ? ?盡管bash shell和dash shell都以Bourne shell為樣板,但它們還是有一些差別的。在深入了解shell腳本編程特性之前,將會帶你了解Debian dash shell的一些特性,以便讓你熟悉dash shell的工作方式。
      ? ? ? ?2.1 dash 命令行參數
      ? ? ? ?dash shell使用命令行參數來控制其行為。下列表中列出了命令行參數,并介紹了每個參數的用途。

      dash命令行參數

      dash命令行參數

      ? ? ? ?除了原先的ash shell的命令行參數外,Debian還加入了另外一些命令行參數。 -E 和 -V 命令行參數會啟用dash shell特有的命令行編輯功能。
      ? ? ? ?-E 命令行參數允許使用emacs編輯器命令進行命令行文本編輯。你可以使用所有的emacs命令來處理一行中的文本,其中會用到Ctrl和Meta組合鍵。
      ? ? ? ?-V 命令行參數允許使用vi編輯器命令進行命令行文本編輯。這個功能允許用Esc鍵在普通模式和vi編輯器模式之間切換。當你在vi模式中時,可以用標準的vi編輯器命令(例如, x 刪除一個字符, i 插入文本)。完成命令行編輯后,必須再次按下Esc鍵退出vi編輯器模式。
      ? ? ? ?2.2 dash 環境變量
      ? ? ? ?dash shell用相當多的默認環境變量來記錄信息,你也可以創建自己的環境變量。將會介紹環境變量以及dash如何處理它們。
      ? ? ? ?(1). 默認環境變量
      ? ? ? ?dash環境變量跟bash環境變量很像(參見第6章)。這絕非偶然。別忘了dash shell和bash shell都是Bourne shell的擴展版,兩者都吸收了很多Bourne shell的特性。不過,由于dash的目標是簡潔,因此它的環境變量比bash shell少多了。在dash shell環境中編寫腳本時要記住這點。
      ? ? ? ?dash shell用 set 命令來顯示環境變量。
      $set
      COLORTERM=''
      DESKTOP_SESSION='default'
      DISPLAY=':0.0'
      DM_CONTROL='/var/run/xdmctl'
      GS_LIB='/home/atest/.fonts'
      HOME='/home/atest'
      IFS='
      '
      KDEROOTHOME='/root/.kde'
      KDE_FULL_SESSION='true'
      KDE_MULTIHEAD='false'
      KONSOLE_DCOP='DCOPRef(konsole-5293,konsole)'
      KONSOLE_DCOP_SESSION='DCOPRef(konsole-5293,session-1)'
      LANG='en_US'
      LANGUAGE='en'
      LC_ALL='en_US'
      LOGNAME='atest'
      OPTIND='1'
      PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
      PPID='5293'
      PS1='$ '
      PS2='> '
      PS4='+ '
      PWD='/home/atest'
      SESSION_MANAGER='local/testbox:/tmp/.ICE-unix/5051'
      SHELL='/bin/dash'
      SHLVL='1'
      TERM='xterm'
      USER='atest'
      XCURSOR_THEME='default'
      _='ash'
      $
      ? ? ? ?這和你的默認dash shell環境很可能會不一樣,因為不同的Linux發行版在登錄時分配的默認環境變量不同。
      ? ? ? ?(2). 位置參數
      ? ? ? ?除了默認環境變量,dash shell還給命令行上定義的參數分配了特殊變量。下面是dash shell中用到的位置參數變量。

      ? ? ? ?所有dash的位置參數都類似于bash shell中的位置參數。可以在shell腳本中使用位置參數,就和bash shell中的用法一樣。
      ? ? ? ?(3). 用戶自定義的環境變量
      ? ? ? ?dash shell還允許定義自己的環境變量。與bash一樣,你可以在命令行上用賦值語句來定義新的環境變量。
      $ testing=10 ; export testing
      $ echo $testing
      10
      $
      ? ? ? ?如果不用 export 命令,用戶自定義的環境變量就只在當shell或進程中可見。
      ? ? ? ?警告 dash變量和bash變量之間有一個巨大的差異。dash shell不支持數組。這個小特性給高級shell腳本開發人員帶來了各種問題。
      ? ? ? ?2.3 dash 內建命令
      ? ? ? ?跟bash shell一樣,dash shell含有一組它能識別的內建命令。你可以在命令行界面上直接使用這些命令,或者將其放到shell腳本中。表中列出了dash shell的內建命令。
      dash shell內建命令

      dash shell內建命令

      dash shell內建命令

      ? ? ? ?可能在bash shell中已經認識了上面的所有內建命令。dash shell支持許多和bash shell一樣的內建命令。會注意到其中沒有操作命令歷史記錄或目錄棧的命令。dash shell不支持這些特性。
      ? ? ? ?本文僅限內部技術人員學習交流,不得作于其他商業用途.希望此文對廣大技人員有所幫助。原創文章出自:南昌APP制作開發公司-百恒網絡


      400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡小程序

      歡迎您的光顧,我們將竭誠為您服務×

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務 售后服務
       
      售后服務 售后服務
       
      備案專線 備案專線
       
      ×
      九九久久精品国产| 国产日韩久久久精品影院首页 | 在线观看亚洲AV日韩AV| 日韩国产成人资源精品视频| 2021久久精品国产99国产精品| 99久久免费精品视频| 久久我们这里只有精品国产4| 亚洲精品无码专区久久久| 精品精品国产国产| 亚洲国产精品综合久久一线| 精品日韩一区二区| 中文字幕日韩精品在线| 国产精品2018| 国产成人亚洲精品播放器下载| 成人精品一区久久久久| 无码人妻精品丰满熟妇区| 无码人妻精品一区二区蜜桃| 国产99视频精品免费观看7| 精品国产天线2019| 亚洲精品亚洲人成在线观看麻豆| 久久精品亚洲精品国产色婷| 久久精品无码专区免费东京热| 日韩精品无码专区免费播放| 亚洲精品成人av在线| 久久99精品久久久久久久野外| 久久国产精品只做精品| 久久久久亚洲精品影视| 四虎国产精品永久免费网址| 色婷婷在线精品国自产拍| 嫖妓丰满肥熟妇在线精品 | 四虎成人精品在永久免费| 国产精品亚洲小说专区| 国产乱子伦精品免费无码专区| 国产精品久久久小说| 国产精品久久久久国产精品| 国产在线午夜卡精品影院| 日韩精品免费一线在线观看| 日韩乱码人妻无码中文字幕久久| 亚洲精品日韩专区silk| 日韩精品亚洲专区在线影视| 男女男精品视频网站在线观看|