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"
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 命令即可
如果這兩個命令沒裝,可以安裝一下即可。