1. 程式人生 > >shell 指令碼的學習與使用(一)

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 -