shell程式設計 2

2021-06-21 14:12:50 字數 4623 閱讀 8396

在shell裡,使用變數之前通常並不需要實現為他們做出宣告。預設情況下,所以變數都被看做字串來儲存,即使它們被賦值為數值也是如此。shell和一些工具程式會在需要時把數值型字串轉換為對應的數值以對它們進行操作。linux大小寫敏感。

在shell中,我們可以通過在變數名前加乙個$符號來訪問它的內容。無論何時想獲取變數的內容,我們都需要在它前面加上乙個$字元。當為變數賦值時,我們只需要使用變數名。

如果字串裡包含空格,就必須用引號把他們括起來。還要注意在等號兩邊不能有空格。

我們可以通過使用read命令將使用者的輸入賦值給乙個變數。這個命令需要乙個引數,即準備讀入使用者的資料的變數名,然後它會等待使用者輸入資料。通常情況下,使用者按下回車鍵時,read命令結束。

1.      使用引號

如果在乙個引數中包含乙個或多個空白符(例如,空格,製表符或者換行符),就必須給參上加上引號。像$myvar這樣的變數在引號中的行為取決於你所使用的引號型別。如果你把乙個帶有$字元的變數放在雙引號中,程式執行到這一行就會把變數替換為它的值;如果你把它放在單引號中,就不會發生替換現象。還可以通過在$字元前機上乙個\字元取消它的特殊含義。

字串通常放在雙引號中,以防止他們被空白符分開。

#! /bin/bash

myvar="hi there"

echo $myvar

echo "$myvar"

echo '$myvar'

echo \$myvar

echo enter some text

read myvar

echo '$myvar' now equals $myvar

exit 0

輸出結果如下:

hi there

hi there

$myvar

$myvar

enter some text

helloworld

$myvar now equals hello world

2.      環境變數

當乙個shell指令碼程式開始執行時,一些變數會根據環境設定中的值進行初始化。這些變數通常用大寫字母做名字,以便區分使用者在指令碼程式裡定義的變數,後者按慣例用小寫字母做名字。

#home                       當前使用者的主目錄

#path                         以冒號分隔的用來搜尋命令的目錄列表

#ps1                                      命令提示符,通常是$字元,但在bash中,你可以使用一些更複雜的值。#ps2                             二級提示符,用來提示後續的輸入,通常是》字元

#ifs                              輸入域分隔符

$0                                 shell指令碼的名字

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

$$                                 shell指令碼的程序號

3.      引數變數

$1,$2…                    指令碼程式的引數

$*                                          在乙個列表中列出所有的引數,各個引數之間用環境變數ifs的第乙個字元分隔開

$@                                        它是$*的一種精巧的變換,不使用ifs,使用當ifs為空時,引數的值也不會結合在一起。

可以通過下面這個例子看出$*和$@的區別

chen123@ubuntu:~/c++$ ifs=''

chen123@ubuntu:~/c++$ set foo bar bam

chen123@ubuntu:~/c++$ echo "$@"

foo bar bam

chen123@ubuntu:~/c++$ echo "$*"

foobarbam

chen123@ubuntu:~/c++$ unset ifs

chen123@ubuntu:~/c++$ echo "$*"

foo bar bam

chen123@ubuntu:~/c++$

實驗:引數和環境變數

指令碼程式:

#! /bin/sh

salutation="hello"

echo $salutation

echo "the program $0 is nowrunning"

echo "the second parameter was$2"

echo "the first parameter was $1"

echo "the parameter list was $*"

echo "the user's home directory is$home"

echo "please enter a newgreeting"

read salutation

echo $salutation

echo "the script is now complete"

exit 0

輸出結果:

hello

the program ./hird is now running

the second parameter was

the first parameter was

the parameter list was

the user's home directory is /home/chen123

please enter a new greeting

sire

sire

the script is now complete

test或[命令

為增強可讀性,當使用[時,我們還是用符號]來結尾。

我們以乙個最簡單的條件為例來介紹test命令的用法:檢查乙個檔案是否存在。用於實現這一操作的命令是test –f ,所以在指令碼程式裡我們寫出如下的**:

if test –f fred.c

then

fi或用[可以寫成如下:

if [ -f fred.c ]

thefi

注意必修在[符號和被檢查的條件之間留出空格。

test命令可以使用的條件型別可以歸為三類:字串比較、算術比較和與檔案有關的條件測試。

舉例如下:

#! /bin/sh

if [ -f /bin/bash ]

then

echo "file /bin/bash exits"

fiif [ -d /bin/bash ]

then

echo "/bin/bash is a directory"

else

echo "/bin/bash is not a directory"

fi輸出:

file /bin/bash exits

/bin/bash is not a directory

if語句:

if condition

then

statements

else

statements

fielif語句

if condition

then

statements

elif condition

statements

else

statements

fifor語句

for variable in values

dostatements

done

實驗:使用固定字串的for迴圈

for variable in values

do statements

done

輸出:bar

fud實驗:使用萬用字元擴充套件的for迴圈

#! /bin/sh

for file in $(ls f*.sh);

dolpr$file

done

exit 0

這個例子演示了$(command)用法。for命令的參數列來自括在$()中的命令的輸出結果。

while語句

while condition do

statements

done

until語句

until condition

do statement

done

case語句

case variable in

pattern[ | pattern]…) statements;;

pattern[ | pattern]…) statements;;

esac

命令列表

and列表

statement  && statement2  && statements  && …

or列表

statement || statement || statement || …

語句塊如果你想在某些只允許使用單個語句的地方使用多條語句,可以把它們括在括號{}中構造乙個語句塊。

shell程式設計 2

編寫shell程式,實現自動刪除50個賬號的功能。賬號名為stud1至stud50。程式實現及注釋如下 bin bash deluser.sh 考察while迴圈 i 1while i le 50 do 檢視賬戶是否存在 只需要在 etc passwd檔案查詢就可以了。我是利用了乙個管道符,再利用g...

shell程式設計珠璣(2)

1 shell 呼叫 ftp load aaa.txt file sudo ftp n i v open ftpserver user ftpname ftppassword cd ftpdirectory lcd localdirectory mget aaa.txt quit end2 if 的...

shell程式設計學習2

朱老師物聯網大講堂 學習筆記 shell中呼叫linux命令 上節使用的就是直接使用,下面是通過呼叫這個值的方式,pwd pwd 注意此處是反引號,esc下面。echo pwd 結果就列印出了當前目錄是什麼,強調一點的是,如果我們希望我們的結果與其它的結合,就會用到雙引號,這沒錯,在這裡要特別說的是...