shell 指令碼的學習與使用(一)
shell 本身是一個用 c 語言編寫的程式,又是一種解釋型的語言。 是使用者使用 Liunx 的橋樑
shell 兩種執行命令的方式
1> 互動式 interactive : 解釋執行使用者的命令 , 使用者輸入一條命令, shell 就解釋執行一條
2> 批處理 batch : 使用者事先寫一個 shell 指令碼, 其中很多條命令,讓 shell 一次把這些命令執行完
shell 的種類
shell 的種類 ,即是 shell 指令碼直譯器的種類。常見的 shell 指令碼直譯器有 bash、sh、csh、ksh 等。bash 是 Liunx 預設的 shell , sh 是 Unix 預設的 shell 。 bash 完全相容 sh, 所以我們學習一般學習 bash , sh 即可。
第一個 shell指令碼
開啟文字編輯器,新建一個檔案。副檔名為 sh
輸入一些程式碼:
#!/bin/bash
echo "hello world"
“#!” 是一個約定的標記,告訴系統這個指令碼需要什麼直譯器來執行,echo 命令用與想視窗輸出文字,類似於java 的 system.out。
執行指令碼: chmod +X ./text.sh #使指令碼具有執行權
.text.sh
注意需要將命令列目錄切換到檔案指令碼所在目錄, ./text.sh 就會直接在當前目錄找。如果有配置環境變數即可寫成 text.sh
shell 變數:
定義變數
定義變數時,變數名不加 $ 美元符號,如:
age="18"
需要注意的是,和你熟悉的程式語言不一樣變數名和等號之間不能有空格
變數命名須遵循的規則如下:
- 首字元必須為字母 (a-z ,A-Z)或 _ 下劃線。
- 變數名中間不能有空格
- 不能使用標點符號
- 不能使用bash裡的關鍵字
使用變數
使用一個定義過的變數,只要在變數名前面加美元符號即可 $ ,如:
#!/bin/bash
echo "what is your name?"
NAME=tommy
echo "my name is ${NAME}"
注意:外面的花括號是可選的。目的是為了區分變數名分界,例如變數名後面還需要輸出其他字串,推薦所有變數都加上花括號
重新定義變數
已經定義過的變數可以被重新定義。如:
#!/bin/bash
age=18
echo "age is ${age}"
age=25
echo "age is ${age}"
只讀變數
使用 readonly 命令可以將變數定義為只讀變數,只讀變數的值不能被改變。意思就是被執行過 readonly 的變數 是不能被二次賦值的 類似於 java 中的 final
例:
#!/bin/bash
age=18
echo "age is ${age}"
readonly age
age=25
echo "age is ${age}"
很明顯的輸出第五行,提示只讀變數。二次賦值無效
刪除變數
使用 unset 命令可以刪除變數,變數被刪除後不能再次使用;unset 命令不能刪除只讀變數
#!/bin/bash
name="bob"
unset name
echo "name is ${name}"
可以看到變數name 沒有任何輸出
變數型別
變數的型別分三種
-區域性變數
-環境變數
-特殊變數
特殊變數列表
變數 | 含義 |
---|---|
$0 | 當前指令碼的檔名 |
$n | 傳遞給指令碼的函式的引數,n是一個數字,表示第幾個引數 |
$# | 傳遞給指令碼或函式引數的個數 |
$* | 傳遞給指令碼或者函式的所有引數 |
[email protected] | 傳遞給指令碼或者函式的所有引數,與 $*是否被雙引號包含的區別 |
$? | 上個命令的退出狀態,或者函式的返回值 |
$$ | 當前 shell程序id,對於shell指令碼,就是這些指令碼所在的程序id. |
命令列引數
執行指令碼時傳遞給指令碼的引數稱作命令列引數。命令列引數用 $n 表示, 例如, \$1 表示第一個引數 \$2 表示第二個引數。依次類推(\為轉義符號)
用法
#!/bin/bash
echo "File name is $0"
echo "Parameter 1 : $1"
echo "Parameter 2 : $2"
echo "[email protected]"
echo "$*"
echo "size : $#"
$? 可以獲取上個命令列的退出狀態。所謂退出狀態就是上個命令列執行後的返回結果。執行成功返回0 , 失敗返回1。除此之外 \$? 還可以表示返回值
shell 替換
轉義字元
轉義字元 | 含義 |
---|---|
\\ | 反斜槓 |
\a | 報警,響鈴 |
\b | 退格,刪除鍵 |
\f | 換頁,將當前位置移到下頁開頭 |
\n | 換行 |
\r | 回車 |
\t | 水平製表符 |
如果表示式中包含特殊字元, shell 將會進行替換。例如在雙引號中使用變數就是一種替換,轉義字元也是一種替換
echo - e 表示將特殊字元進行轉義輸出,否則反之
變數替換
變數替換可以根據變數的狀態(是否為空 是否定義等) 來改變他們的值
可以使用的變數替換形式:
形式 | 說明 |
---|---|
${var} | 變數本來的值 |
${var:-word} | 如果變數 var 為空或者已被刪除 unset ,那麼返回 word,但不改變 var 的值 |
${var:=word} | 如果變數 var 為空或者已被刪除 unset,那麼返回 word, 那麼並將 var 的值設定為 word |
${var:?msg} | 如果變數 var 為空或者已被刪除 unset,那麼將訊息 msg 送到標準錯誤輸出,可以用來檢測變數 var 是否可以被正常賦值。若此替換出現在 shell 中,那麼指令碼講停止執行 |
${var:+word} | 如果變數 var 被定義,那麼返回 word ,但不改變 var 的值 |
#!/bin/bash
echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"
echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"
unset var
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"
var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"
echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"
shell 運算子
Bash 支援很多運算子,包括算數運算子,關係運算符,布林運算子,字串運算子和檔案測試運算子。
原生 bash 不支援簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr , expr 最常用。
expr 是一款表示式計算工具,使用它能完成表示式的求值操作。
例:
#!/bin/bash
value = `expr 2 + 2`
echo -e "Total is ${value}"
注意:
- 表示式和運算子之間要有空格,例如 2+2 是不對的 2 + 2正解。變數與等號間不能有空格
- 完整的表示式需要被一對 `
包含,不是單引號,此符號在 Esc 健下方
算數運算子
#!/bin/sh
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a is equal to b"
fi
if [ $a != $b ]
then
echo "a is not equal to b"
fi
相關推薦
linux之shell指令碼學習(一)
#!/bin/bash echo 'hello' your_name='longxiong' echo $your_name echo ${your_name} for i in `ls /opt`; do echo ${i} done str="1234" echo ${#str} unset s
Shell指令碼學習指南(一)——基本概念
LANG 未設定任何LC_XXX時的預設值 LC_ALL 用來覆蓋所有其他的LC_XXX變數的值 LC_COLLATE 排序規則 LC_CTYPE 字符集
linux的shell指令碼學習筆記(一)
書籍《shell從入門到精通》 1.執行shell的方式: 1).bash test.sh 2).chmod 744 test.sh ./test.sh 3).source test.sh 2.變數的定義: var=123(注意'='左右倆邊不要有空格,
shell指令碼學習第四彈-管道與IO重定向
shell指令碼學習第四彈-管道與IO重定向 一、IO介紹 什麼是IO?簡單的來說,IO就是輸入輸出;在unix裡面,我們必須要標準輸入,標準輸出和標準錯誤。我們可以用程式執行過程來更明顯說明:程式的輸入就是標準輸入,程式處理完之後,輸出結果就是標準輸出,或者報錯就是標準錯誤。
Shell指令碼學習指南讀書筆記(一)
第1章 背景知識略 第2章 入門 編譯型語言 優點:高效 缺點:多半運作於底層,處理位元組、整數或其他機器層級的物件(C++中就很難將一個目錄所有檔案複製到另一個目錄中) 指令碼程式語言 通常是解釋型的
shell指令碼學習筆記(一、shell指令碼變數語法)
sh檔案用"#!"開頭表示用什麼來執行程式,如"#!/bin/bash" 表示用bin/bash來執行sh sh檔案,預設是文字檔案,是不可以執行的,可以通過chmod允許sh檔案可以被執行,chmod命令說明如下: chmod----改變一個或多個檔案的存取模式(mode) chmod
shell指令碼學習筆記 (一)
一、位於第一行的#! 當一個檔案中開頭是#!時,核心會掃描改行的剩餘部分,看是否存在可用來執行程式的直譯器的完整路徑,此外核心還會掃描是否有一個選項要傳給直譯器,核心會以指定的選項來引用直譯器,在搭配命令列的其他部分。 例如: 有一個csh指令碼,名為/usr/ucb
Shell 指令碼學習記錄(一)
1. echo 是向 視窗輸入文字 ,例如: echo “hello” 2. 將檔案儲存為test.sh 執行命令為 ./test.sh 3. 定義變數,或者字串不用申明,例如:value=1 string=”hello world” 注意:變數名和等號之間不能加空格 4.使用變數 在前面加
【shell指令碼學習-3】
part-1: #!/bin/bash#source,sh,./shell_name :shell指令碼執行方法 # #變數 #declare :修飾x=10/2echo "$x"#將變數修飾為只讀declare -r xx="a" #再次為變數賦值檢驗修飾echo "$x"#將變數修飾為
shell指令碼學習-練習寫一個指令碼1
# 1.依次展示/etc/passwd中的使用者名稱和UID。格式如:Hello,$USER,your UID is $UID.# 2.統計一個有多少個使用者 #!/bin/bash #Program Description: #Author: Created b
SHELL指令碼學習-練習寫一個指令碼3
#通過ping命令測試192.168.1段的所有主機是否線上,如果線上就顯示is up並顯示藍色,如果不線上就顯示is down。 #!/bin/bash #Program Description: #Author: Created by ctu_lzq #Date: 2018
Shell指令碼學習總結
最近一段時間研究語音識別(Automatic Speech Recognition, ASR),接觸到一款優秀的ASR開源專案Kaldi。學習過程中,發現Kaldi大部分指令碼採用Shell語音編寫,所以潛心學習了一段時間的Shell程式設計。總體來說,該語言難度一般
shell指令碼學習第三彈-變數的使用
shell指令碼學習第三彈-變數的使用 一、什麼是變數 相信大家聽到變數這個詞語很敏感吧,我們的C語言中也有所謂的變數,變數即在程式執行過程中它的值是允許改變的量。 也可以這麼說,變數的本質是一種鍵值對,舉個例子來說:str=“123456”,“12345”就是鍵值對中的Val
shell指令碼學習第一彈
shell指令碼學習第一彈 作為一個linux程式設計師,不會shell的指令碼的編寫,可是不合格的呀!!! 今天,我們一起來看看shell指令碼的編寫: 別的先不說,先來一個入門級的案例: 1 #!/bin/bash 2 #當前路徑 3 pwd 4
Shell 指令碼學習-Day1
Day1: 命令與引數 cd /dev; ls -l ls --color #輸出顏色 #shell識別三種命令:1、內部命令 2、shell函式 3、外部命令(iostat、fio、issdcm..) 引數: echo "Shell 輸出指令碼名稱及引數"; echo "執行的指令
shell指令碼程式設計(一)
(一)要求:1、在SHELL語句中加入必一要的註釋,以便以後閱讀和維護,註釋以”#”開頭。 2、對變數和函式命名時最好能使用有含義且容易理解的名字。 (二)內容:1、建立以下選單程式: HOST: ******** &
shell指令碼學習方法
1,熟悉shell指令碼基礎知識點,掌握(sed,find,awk,cut等重要的命令。),掌握判斷語句,迴圈語句的使用,和shell指令碼的格式,步驟要寫工整。 2,練習shell指令碼,從簡單的指令碼練起走,自己先敲一邊,在看裡面的內容是如何實現的。在回過頭來看相關的知識點(不用死記硬背,用
Shell指令碼學習&SpringBoot啟動關閉指令碼
一、Shell指令碼學習手冊 傳送門 二、SpringBoot Shell啟動關閉指令碼 springboot 啟動指令碼 #!/bin/sh ps -ef |grep sell-0.0.1-SNAPSHOT.jar |grep -v grep if [ $? -eq 0 ];then echo
Shell指令碼學習 - 運算及一些方法
繼續shell指令碼學習 運算子 bash不支援簡單的數學計算,需要依賴其他命令實現。 expr可以代為實現。 # 表示式一般這麼寫 `expr 4 + 4` 注意點: 1. 引號不是普通單引號,是右斜的引號,在esc鍵下方。表示式用這種右斜的引號括起來,必須成對出現
shell 指令碼學習筆記
前言 基於bash 並參考 菜鳥教程的shell 教程 http://www.runoob.com/linux/linux-shell.html ### shell 的執行方法 chmod +x ./test.sh bash test.sh 輸入輸出 除錯輸出 #!/bin/bash set -