1. 程式人生 > >Linux學習基礎——之shell基礎——指令碼的執行方式

Linux學習基礎——之shell基礎——指令碼的執行方式

所有的Linux命令都可以在shell中執行

1、echo 輸出命令

[email protected] ~】#echo 【選項】【輸出內容】

選項:

    -e   :支援反斜線控制的字元轉換

那什麼樣的字元加反斜線才能被識別呢?

看如下表格

控制字元 作用

\\

輸出 \ 本身
\a 輸出警告音
\b 退格鍵,也就是向左刪除鍵
\c 取消輸出行末的換行符。和“-n”選項一致
\e ESCAPE鍵
\f 換頁符
\n 換行符
\r 回車鍵
\t 製表符,也就是Tab鍵
\v 垂直製表符
\Onnn 按照八進位制ASCLL碼錶輸出字元。其中0位數字零,nnn是三位八進位制數
\xhh 按照十六進位制ASCLL碼錶輸出字元。其中hh是兩位十六進位制數

注意:如果要輸出的內容中有空格,需要新增“引號”

示例

1):輸出hello world!    特別注意,感嘆號有特別作用,所以此處如果想輸出感嘆號,需要使用單引號,

[[email protected] ~]# echo "hello world"
hello world
[[email protected] ~]# echo 'hello world !'
hello world !
[[email protected] ~]# 
注意,如果使用雙引號,如第一行,請不要在此處新增感嘆號。因為感嘆號有特殊作用
具體後面學習到再說

2)示例刪除左側字元:

[email protected]

~】#echo  -e  "ab\bc"

[[email protected] ~]# echo -e "ab\bc"
ac

3)製表符與換行符

[email protected] ~】#echo -e "a\tb\tc\nd\te\tf"

[[email protected] ~]# echo -e "a\tb\tc\nd\te\tf"
a	b	c
d	e	f
[[email protected] ~]# 

解析:a和b b和c 之間插入了製表符,c和d之間插入了換行符

4)#按照十六進位制ASCII碼也同樣可以輸出

[email protected] ~】#echo -e "\x61\t\x63\n\x64\t\x65\tx66"

[[email protected] ~]# echo -e "a\tb\tc\nd\te\tf"
a	b	c
d	e	f
[[email protected] ~]# echo -e "\x61\t\x62\t\x63\n\x64\t\x65\t\x66"
a	b	c
d	e	f
[[email protected] ~]# 

注:十六進位制的ASCII碼可以從網上找到相對應的表,即數字和字元的對應表示

5)#輸出顏色

[email protected] ~】#echo -e “\e[1;3]m abcd \e[0m”

注:#30m =黑色,31m=紅色,32m=綠色,33m=黃色

        #34m=藍色   ,35m=洋紅,36m=青色,37m=白色

會輸出紅色的abcd

[[email protected] ~]# echo -e "\e[1;31m abcd \e[0m"
 abcd 
[[email protected] ~]# 

注:\e[1;  表示開啟顏色調節輸出, \e[0m  表示結束顏色調節輸出

2、第一個指令碼

[email protected] sh】# vi hello.sh

#!/bin/Bash

#The first program

#Author:xiaoxiaozhou (E-mail:[email protected])

echo -e "Mr.xiaoxiaozhou is the most honest man in his shcool'

注意:如上#!/bin/Bash  屬於例外,不是註釋,而是標識,

           除此之外,在Linux中一般以#開頭的是註釋;該句不可省,表示如下是shell指令碼

[[email protected] sh]# vim hello.sh

#!/bin/bash
#xiaoxiaozhou([email protected])

echo "Mr.xiaoxiaozhou is the honest man in our school"
                                                                                                       

3、指令碼執行的方式:

步驟一:要想執行,必須賦予相應執行許可權;

步驟二:所有命令或者指令碼的執行,實質都是需要使用絕對路徑的方式

(沒有明顯使用絕對路徑的,一定用了其他方式,比如配置環境變數,但實質沒變)

》賦予執行許可權,直接執行

 >>chmod 755 hello.sh

 >>./hello.sh

[[email protected] sh]# chmod 755 hello.sh

#使用者想要執行指令碼,必須對其有執行許可權,所以上述做了賦予許可權的動作
[[email protected] sh]# ll
總用量 4
-rwxr-xr-x. 1 root root 97 12月 16 09:24 hello.sh
#通過絕對路徑呼叫執行
[[email protected] sh]# /root/sh/hello.sh
Mr.xiaoxiaozhou is the honest man in our school
#通過相對路徑呼叫執行
[[email protected] sh]# ./hello.sh
Mr.xiaoxiaozhou is the honest man in our school
[[email protected] sh]# ls
hello.sh
[[email protected] sh]# 

》通過Bash呼叫執行指令碼

>>bash hello.sh

[[email protected] sh]# bash hello.sh 
Mr.xiaoxiaozhou is the honest man in our school
[[email protected] sh]# 

4、如果執行一個陌生的 .sh的指令碼,執行失敗,怎麼辦?

步驟一、根據提示確認不可執行的原因,如果是沒有許可權,賦予相應許可權即可;

               如果是其他,比如提示找不到檔案,先確認路徑是否正確,是否有通過實質的絕對路徑的方式進行了訪問;

               如果路徑和許可權都對,但是提示如下

[[email protected] ~]./Tetris.sh
--bash:./Tetris.sh: /bin/bash^M:bad interpreter:沒有那個檔案或目錄
[[email protected] ~]

通過提示可以看到,M 相關錯誤這其實是說指令碼檔案中出錯了,解決步驟如下;

步驟二、許可權和路徑錯誤都好解決,如果是上方末尾問題,那其實是因為該指令碼檔案編輯環境其實是在Windows環境下編輯好,拷貝到當前Linux環境下進行執行的。因為Linux指令碼中,正常的回車符結尾是$結尾的,但是在Windows中,編輯的 回車符,結尾是以M$結尾,所以移到Linux環境下,M不被識別

那如何驗證是否同上所說呢?

通過cat -A  [指令碼檔案路徑]         -A選項可以把檔案中的隱藏字元都查出來,比如這裡的M$

所以顯示錯誤。

解決原理:把M$換成$即可;

解決方法:有兩個,

方法一:手動更換;

方法二:使用命令dos2unix   [要轉換的檔名]    轉換

轉換完,即可正常執行。

擴充套件:相反,在Linux中編輯的.sh檔案,想在Windows中執行,只要使用unix2dos 命令即可

如果這兩個命令沒裝,可以安裝一下即可。