shell指令碼程式設計《一》 變數及指令碼中數學計算

2021-07-09 06:28:36 字數 2892 閱讀 7851

不要把shell指令碼命名為test,因為在linux中已經有乙個名為test的實用程式。首先要使shell找到指令碼程式,有三種方法:

1. 將shell指令碼檔案所在的路徑新增到path環境變數中

2. 在命令列中使用檔案的絕對路徑或相對路徑執行,不過得修改許可權,如命名乙個指令碼檔案為hello,然後修改許可權才能執行

3. 同二,命名乙個檔案為hello.sh,用 sh hello.sh即可

指令碼第一行一定定要寫上#!/bin/bash ( 表明使用的shell型別);接著都知道指令碼程式執行時會列印很多輸出,使用echo 列印輸出

環境變數

使用set可以顯示活動環境變數的完整列表,使用$符號可取值,看乙個簡單的指令碼(指令碼中經常需要列印輸出自己的工作環境)

#!/bin/bash

echo uid: $uid

echo home: $home

使用者變數

val1=10

val2=-10

val3=hello

val4="hello"

shell指令碼自動為變數值確定資料型別(字串),若要引用得需要$

反引號允許將shell命令的輸出賦值給變數,見程式(這是一種為了日誌檔名提取日期的常用技術)

#!/bin/bash

today=`date +%y%m%d`

ls /usr/bin -al > log.$today

輸入重定向,是把乙個檔案內容重定向到乙個命令中,格式command < inputfile,還有一種重定向:

內建重定向,這種重定向允許在命令列中而非檔案中為輸入重定向指向資料,使用方式如下,符號<<,但在開頭和末尾都必須使用相同的檔案標記

comman << marker(常使用eof)

data

marker(常使用eof)

#例如 wc << eof

> test string

1 > test string

2 > test string

3 > eof

expr命令允許處理命令列中的等式,如下

expr 1 + 5

#必須得分開寫,不然會被識別為乙個

expr 5 * 2(錯誤)

expr 5 \* 2 (使用轉義字元)

再看乙個程式

#!/bin/bash

var1=10

var2=20

var3=`expr $var2 / $var1`

echo the result is $var3

更常用的是使用和$即可進行數學計算,如下

#!/bin/bash

var1=100

var2=50

var3=45

var4=$[$var1*($var2-$var3)]

echo the result is $var4

但注意bash shell的數學操作只支援整數演算法

為了解決上訴只能進行整數的問題,常用的是用內建的bash計算器(bc),退出須輸入quit。

浮點算術被稱為scale的內建變數控制。(scale 是設小數字數的,預設為0)

在指令碼中使用bc的基本格式為:

var=`echo 「options; expression」 | bc`

下面在指令碼中使用bc,此例子設定4位小數

#!/bin/bash

var1=100

var2=45

var3=`echo

" scale=4; $var1 / $var2 " | bc`

echo the answer is $var3

對於簡短的計算這種方法很好,但有時數字會很多。如果有多個計算,就會很亂,因此可以有兩種解決方案

1. 使用重定向,允許把乙個檔案重定向到bc命令

2. 使用內建重定向

看乙個使用內建重定向的例子

#/bin/bash

var1=10.46

var2=43.76

var3=33.2

var4=71

var5=`bc << eof

scale = 4

a1 = ($var1 * $var2)

b1 = ($var3 * $var4)

a1 + b1

eof`

echo the answer is $var5

每條在shell中執行的命令都使用乙個退出狀態,這個退出狀態是乙個介於0~255之間的整數值,每當命令執行完時,命令就會把退出狀態傳遞給shell。

可以使用$?來查詢,如執行完一條命令後可以使用echo $?來檢視,下面列舉一些常見的推出值

0:命令成功完成

1:通常的未知錯誤(如提供乙個無效的引數)

2:誤用的shell命令

126:命令無法執行(使用者沒有許可權)

127:沒有找到命令(命令不存在)

128:無效的退出引數

130:ctrl+c終止的命令

預設情況下,shell指令碼以指令碼中最後一條命令的退出狀態退出,當然你可以使用exit命令更改退出狀態碼。

Shell指令碼程式設計 變數

1 變數定義的方法 name value name中的規則同c語言,value可以是任何值,如果包含空格,則應該使用 引起來。2 訪問變數 varname 3 定義陣列變數 name index value 這裡的index可以為n,不用從0開始賦值,如我只定義 name 3 value,則name...

shell指令碼程式設計之變數簡介及指令碼執行過程

變數型別 字元型 數值型 真 假 事先確定資料的存放格式和長度 變數存放在記憶體空間 編譯型語言,沒有額外的處理邏輯,屬於強型別語言 指令碼型語言,可以有直譯器控制 所以,可以是弱型別語言 強型別 變數在使用前,必須事先宣告,甚至還需要初始化 給乙個初始值,如果沒給乙個原始值,裡面是隨機數 弱型別 ...

Shell指令碼程式設計(一)

變數的型別 或者 由 反引號 括起來的也是一條命令,shell 先執行該命令,然後將輸出結果立刻代換到當前命令列中。如下 date 日期函式 czk localhost date date czk localhost echo date sat may 18 23 45 47 edt 2019 方式...