shell程式設計入門

2021-09-01 07:54:40 字數 4228 閱讀 6061

shell指令碼程式不是複雜的程式,它是按行解釋的。指令碼程式總是以

#!/bin/sh

開始,它通知shell使用系統上的bourne shell直譯器。其中#符號是注釋。

指令碼程式是從上到下執行的,執行指令碼前需要改變該指令碼程式的執行許可權。確保正確建立指令碼例徑,只有

這樣,指令碼程式才能正確執行。

下面通過乙個指令碼程式示例來看shell是如何工作的。

linux系統中有好多種不同的shell,但通常使用bash(bourne again shell)進行shell程式設計,因為bash是

免費的並且很容易使用。所以在本文中提供的指令碼都是使用bash進行shell程式設計。和其他程式語言一

樣,可使用任意一中編輯器來編寫shell程式,比如nedit,kedit,emacs,vi等。

但編輯好指令碼程式後,要使指令碼程式可執行,只需要改變指令碼程式的許可權,命令如下:

[root@barrymore /]chmod +x filename

然後,通過輸入:

[root@barrymore /]./filename:

來執行程式。

下面是個簡單的例子:

$vim firstscript

#!/bin/sh

echo "you are welcome to use bash."

echo "current work directory is $pwd."

echo "you are $logname."

增加執行許可權

$chmod +x firstscript

開始執行指令碼程式:

$./firstscript

執行結果:

you are welcome to use bash.

current work directory is /home/yangailin.

you are yangailin

環境變數與shell變數

為使shell變成更加有效,系統提供了一些shell變數。shell變數可以儲存諸如路徑名,檔名或者乙個

數字這樣的變數。從這點上可以得出乙個結論:在shell程式設計中,變數至關重要。

下面有一些小的指令碼程式來說明各種變數的使用。

1.顯示變數

使用echo命令輸出單個變數的值

$ hello="hello,world"

$ echo $

hello,world

$ another=100

$ echo $

1002.清除變數

使用unset命令清除變數

$ tmp_var=foo

$ echo $

foo$ unset tmp_var

$ echo $

$ 3.顯示所有本地shell變數

使用set命令顯示所有本地定義的shell變數

$ set

....

term=vt100

shell=bin/bash

set輸出可能很長。檢視輸出時可以看出shell已經設定了一些使用者變數以使工作環境更加容易使用

4.結合變數值

將變數結合在一起

echo $$

$ tmp_var1="hello,"

$ tmp_var2="world"

$ echo $$

hello,world

5.測試變數是否已經設定

有時要測試是否已設定或初始化變數。此命令格式為:

$ 如果設定了變數值,則使用它;如果未設定,則取新值。例如

$ colour=blue

$ echo 'this colour is $'

this colour is blue

變數colour取值blue,echo列印變數colour時,首先檢視該變數是否已經賦值,如果查到,則使用該值。

現在清除該值,再來看看結果

$ unset colour

$ echo 'this colour is $'

this colour is green

$ echo $

$上面的例子並沒有實際值傳給變數,需要使用下面的命令來完成此功能:

$例如:

$ unset colour

$ echo 'this colour is $'

this colour is green

$ echo $

green

$6.使用變數來儲存系統命令引數

可以使用變數來儲存系統命令引數的替換資訊。

在下面的例子中使用變數儲存檔案複製件的檔名資訊。變數source儲存passwd檔案的路徑,dest儲存

cp命令中的檔案目標。示例如下:

$ src_file='/var/log/messages'

$ dst_file='/var/log/messages_1'

$ cp $ $

7.設定唯讀變數

如果想設定變數後不再改變其值,可以將該變數設定成唯讀方式。格式如下:

variable-name=value

readonly variable-name

下面的例子中,把變數設定成乙個常量並將它設為唯讀,任何改變該變數值的操作都將返回錯誤資訊。

$ maxval=65535

$ echo $

65535

$ readonly maxval

$ maxval=32767

bash:maxval:readonly variable

要檢視所有唯讀變數,可使用唯讀命令:

$ readonly

declare -ir euid="0"

declare -r maxval="65535"

declare -ir ppid="24109"

8.設定環境變數

variable-name=value

export varoable-name

9.顯示環境變數

$ myshell='bash'

$ export myshell

$ echo $

bash

$使用env命令可以檢視所有的環境變數

$ env

10.清除環境變數

使用unset命令可以清除環境變數

$ unset myshell

$ echo $

$11.set命令

在$ home.profile檔案中設定環境變數時,還有另外一種方法匯出這些變數。使用set命令-a選項,即

set -a指明所有變數直接被匯出。不要在/etc/profile中使用這種方法,最好只在自己的$ home.profile

檔案中使用。

$ cat yangailin.profile

set -a

mail='/var/spool/mail/yangailin'

path=$home:$path

12.將變數匯出到子程序

shell新使用者碰到的問題之一是任何把定義過的變數匯出到子程序。其實根據前面討論過的環境變數的工

作方式,只要使用export命令就可以。可以用指令碼程式來實現,並在指令碼中呼叫另一指令碼。只要使用

export命令匯出變數,就可以在任意的指令碼中使用該變數,他們均將繼承匯出變數的所有許可權。當然,不

可以將變數從子程序匯出到父程序中,但可以通過重定向做到。

13.向系統命令傳遞引數

可以在指令碼中向系統命令傳遞引數,下面的例子是,在find命令裡使用$l 引數指定查詢的檔名。

$ cat findfile

#!/bin/sh

find / -name $l -depth

$ ./findfile passwd

/etc/passwd

/etc/pam.d/passwd

/etc/uucp/passwd

/usr/bin/passwd

14.特定變數引數

既然已經知道了任何訪問和使用shell指令碼中的引數,就要必須知道指令碼執行時的一些相關控制資訊,共

有7個特定變數

$# 傳遞到指令碼的引數個數

$* 以乙個單字串顯示所有向指令碼傳遞的引數,與位置變數不同,次選項引數可超過九個

$$ 指令碼執行的當前程序id號

$! 後台執行的最後乙個程序的程序id號

$@ 與$#相同,但是使用時加引號,並在引號中返回每個引數

$- 顯示shell使用的當前選項,與set命令功能相同

$? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤

Shell 程式設計入門

首先建立乙個檔案 在終端中輸入如下命令 vi helloworld.sh 然後按i進行命令編寫 下面這句話是必須寫的 bin sh這句話是必須寫的 bin sh a hello world echo a 下面執行的時候先得輸入 將這個許可權改為可執行檔案 chmod x helloworld.sh ...

Shell程式設計入門

目錄 shell概述 shell解析器 shell指令碼 什麼是shell指令碼 編寫shell指令碼 1 指令碼格式 2 第乙個shell指令碼 helloworld 3.指令碼的常用執行方式 第一種 採用bash或sh 指令碼的相對路徑或絕對路徑 不用賦予指令碼 x許可權 第二種 採用輸入指令碼...

Shell 程式設計入門

首先建立乙個檔案 在終端中輸入如下命令 vi helloworld.sh 然後按i進行命令編寫 下面這句話是必須寫的 bin sh這句話是必須寫的 bin sh a hello world echo a 下面執行的時候先得輸入 將這個許可權改為可執行檔案 chmod x helloworld.sh ...