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

      百恒網絡

      南昌百恒網絡

      dash shell的特性

      百恒網絡 2017-04-08 7054

      雖然bash shell是Linux發行版中最廣泛使用的shell,但它并不是唯一的選擇?,F在基本已經了解了標準的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中的位置參數??梢栽趕hell腳本中使用位置參數,就和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
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡小程序

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

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務 售后服務
       
      售后服務 售后服務
       
      備案專線 備案專線
       
      ×
      精品一区二区三区水蜜桃| 精品国产理论在线观看不卡| 国内精品人妻无码久久久影院导航 | 亚洲日韩精品A∨片无码| heyzo高无码国产精品| 精品视频一区二区观看| 中文字幕在线观看日韩| 国产亚洲精品2021自在线| 妇女自拍偷自拍亚洲精品| 国内精品自在自线视频| 亚洲国产精品成人综合色在线| 精品国产福利一区二区| 精品综合久久久久久97| 3d动漫精品成人一区二区三 | 国产亚洲精品成人久久网站| 日韩精品视频免费网址| 蜜臀91精品国产高清在线观看| 最新亚洲精品国偷自产在线| 久久99这里只有精品国产| 国产精品亚洲四区在线观看| 精品麻豆丝袜高跟鞋AV| 精品国产精品国产偷麻豆| 精品国产第一国产综合精品| 国产成人久久精品区一区二区| 精品国内在视频线2019| 孩交videos精品乱子豆奶视频| 国产精品1024香蕉在线观看| 2020久久精品国产免费| 中文字幕一区日韩精品| 亚洲精品理论电影在线观看| 欧美成人精品三级网站下载| 国产精品秘入口18禁麻豆免会员| 国产精品成人国产乱| 精品国产线拍大陆久久尤物| 国外AV无码精品国产精品| 在线观看精品国产福利片100| 国产精品毛多多水多| 国产亚洲女在线线精品| 手机看片福利永久国产日韩| 日韩色图在线观看| heyzo加勒比高清国产精品|