1. 程式人生 > >Linux shell script 的 關閉echo -e 在shell指令碼中輸出 “-e”

Linux shell script 的 關閉echo -e 在shell指令碼中輸出 “-e”

第一次寫 script指令碼 按照鳥哥的hello world 的程式寫了一下:

#!/bin/bash
# Program:
#	This program shows "hello World!" in your screen.
#History:
# 2015/07/17	Song	First release

PATH=${PATH}:~/Linux_learn/bin

export PATH

echo -e "hello world!\a\n"
exit 0
然後按照書上的 
[email protected]:~/Linux_learn/bin$ sh hello-world.sh 
發現輸出結果是
-e hello world!
這是很奇怪的一件事,百度了一下,發現

用 

bash hello-wrold.sh
可以。

原因:

GNU/Linux作業系統中的/bin/sh本是bash (Bourne-Again Shell) 的符號連結,但鑑於bash過於複雜,有人把bash從NetBSD移植到Linux並更名為dash (Debian Almquist Shell),並建議將/bin/sh指向它,以獲得更快的指令碼執行速度。Dash Shell 比Bash Shell小的多,符合POSIX標準。

Ubuntu繼承了Debian,所以從Ubuntu 6.10開始預設是Dash Shell。

應該說,/bin/sh/bin/bash

雖然大體上沒什麼區別,但仍存在不同的標準。標記為#!/bin/sh的指令碼不應使用任何POSIX沒有規定的特性 (如let等命令, 但#!/bin/bash可以)。Debian曾經採用/bin/bash更改/bin/dash,目的使用更少的磁碟空間、提供較少的功能、獲取更快的速度。但是後來經過shell指令碼測試存在執行問題。因為原先在bash shell下可以執行的shell script (shell 指令碼),在/bin/sh下還是會出現一些意想不到的問題,不是100%的兼用。

上面可以這樣理解,使用man sh命令和man bash命令去觀察,可以發現sh本身就是dash,也就更好的說明整合Debian系統之後的更改。

原來因為shell其實有很多種,而且不同的shell 語法也不一定相同。

因為dash比bash更加小,速度快,所以現在高版本的Ubuntu預設都為dash。sh命令作為連結  連線到dash。

用命令ls -l /bin/sh 看看


但很多教程第一行都寫#!/bin/bash ,但預設是dash不是bash  所以就有以上錯誤 。

關於指令碼第一行的理解:

 #!/bin/sh

 #!/bin/bash

這個說明可以讓你在將這個指令碼檔案 +x 後 用 ./ 執行時,自動分配直譯器




相關推薦

Linux shell script關閉echo -eshell指令碼輸出 “-e

第一次寫 script指令碼 按照鳥哥的hello world 的程式寫了一下: #!/bin/bash # Program: # This program shows "hello World!" in your screen. #History: # 2015/07/1

shell 指令碼set -e選項作用範圍

        編寫shell指令碼沒多久,對於其許多命令的具體用法還不太熟悉。最近剛好有需求,就嘗試用指令碼去實現。其中就有用到set -e選項。         在用這個命令之前,也查過其功能,描述比較簡單:就是當命令以非零狀態退出時,則退出shell。主要作用是,當指令

Linux Shell 常用的變數及其在指令碼的呼叫

Linux 中 Shell 常用的變數及其基本操作 首先了解一下什麼是變數 變數 簡單的說,變數就是讓某一個特定字串代表不固定的內容。舉個數學例子,那就是:“ y = ax + b”這東西,在等號左邊的 (y) 就是變數,在等號右邊的 (a

Unix/Linux指令碼"set -e"的作用

有些指令碼中會看到這樣的語句:#!/bin/bash set -e command 1 command 2 ... exit 0“set -e” 這句語句告訴bash如果任何語句的執行結果不是true則應該退出。這樣的好處是防止錯誤像滾雪球般變大導致一個致命的錯誤,而這些錯

解釋bash指令碼set -e與set -o pipefail的作用

man set中的解釋:       set [--abefhkmnptuvxBCEHPT] [-o option] [arg ...]       set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...]... ...        

Linux管道的作用--管道命令在指令碼的使用

 在UNIX下的管理性檔案,大部分是不需要特殊的檔案專用工具即可編輯,列印和閱讀的簡易文字檔案。 這些檔案大部分放在標準目錄:/etc下。如: 常見的密碼檔案和組檔案:(passwd,group)

groovy指令碼輸出除錯資訊到檔案

public class xxxxxxxx extends ScriptOper {     public void preProc_xxxx (DataRecord record, List<ScriptMap> lstMap) {         ScriptMap map = ScriptM

Linux shell指令碼執行命令結果賦值給變數&&echo輸出變數是否包含換行符的問題

Linux shell指令碼中執行命令結果賦值給變數&&echo輸出變數是否包含換行符的問題 echo $ret 和 echo "$ret" 區別: 如果是echo $ret,輸出結果為一行,沒有換行符 如果是echo "$ret",輸出結果為多行,有換行符

Unix/Linux shell腳本 “set -e” 的作用

-i col ret urn 執行 copyto shel free erro #!/bin/bash set -e command 1 command 2 ... exit 0------------------------------------------------

Linux(7)學習shell script

一.什麼是shell script shell script 是利用 shell 的功能所寫的一個『程式 (program)』,這個程式是使用純文字檔,將一些 shell 的語法與指令(含外部指令)寫在裡面, 搭配正規表示法、管線命令與資料流重導向等功能,以達到我們所想要的處理目的。簡單的說,

學習Linux shell指令碼連線字串的方法

這篇文章主要介紹了Linux shell指令碼中連線字串的方法,如果想要在變數後面新增一個字元,可以用一下方法: 程式碼如下: $value1=home $value2=${value1}"=" echo $value2 把要新增的字串變數新增{},並且需要把$放到外面。 這樣輸出的結果

鳥哥的Linux私房菜讀書筆記--shell script的追蹤與debug

關於sh命令     [[email protected] ~]$ sh [-nvx] scripts.sh         選項與引數:     &nbs

Linux下Oracle資料庫自動備份Shell指令碼

1.在伺服器建立備份目錄,並賦予許可權 mkdir -p /backup/P_DATA  #新建shell指令碼存放路徑 mkdir -p /backup/P_DB_BACK  #新建Oracle資料庫備份目錄 chown -R oracle:oinstall /backup/P

Linux/Unix shell 指令碼呼叫SQL RMAN指令碼

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

linux shell 避免’sudo echo x >’ 時’Permission denied’

[[email protected] ~]$ sudo echo "nameserver 114.114.114.144" >> /etc/resolv.conf -bash: /etc/resolv.conf: Permission denied 分析:這是因為重定向符號

大資料技術學習筆記之linux基礎3-軟體管理與shell指令碼開發

一、Linux軟體管理     -》壓縮檔案管理         -》常見壓縮格式             -

設定 shell 指令碼 echo 顯示內容帶顏色

shell指令碼中echo顯示內容帶顏色顯示,echo顯示帶顏色,需要使用引數 -e  格式如下:  echo -e "\033[字背景顏色;文字顏色m字串\033[0m" 例如:  echo -e "\033[41;36m something here

Linux通過cat EOF新建檔案並新增或追加內容方法並在shell指令碼配置環境變數時使用

cat << EOF >實現新建檔案並新增內容 [email protected]:/opt# cat << EOF >abcd.txt > 1 > 2 > 3 > eof > EOF [email

Shell 指令碼shell script)學習

test.sh  #!/bin/bash echo "Hello World !" 執行方法 1、作為可執行程式 將上面的程式碼儲存為 test.sh,並 cd 到相應目錄: chmod + x  目錄  chmod +x ./test.sh #使指令碼具有