shell shell程式設計基礎知識總結

2021-05-23 08:38:05 字數 4510 閱讀 9328

前兩個沒什麼好說的,下面說一下後面兩個:

《輸入重定向的格式為:

命令 < 檔名

似乎後面的「檔名」不能再為命令了。 可以用管道實現類似功能。

《輸入從定向被成為here檔案,它將一對分隔符之間的正文重定向輸入給命令,其格式如下:

$命令 << 分隔符

輸入行……

輸入行分隔符

另外有錯誤輸出重定向

$命令 2 > 檔名

管道把乙個命令的輸出傳遞給另乙個命令作為輸入,格式為:

命令1 | 命令2

在shell中有兩種方法可以將若干命令組合起來,使其在邏輯上成為一條命令。

shell不支援資料型別,它將任何變數的值都看成是一串字元。但從賦值的形式上可以將變數分為四種形式:使用者自定義變數、環境變數、位置變數和預定義的特殊變數。

賦值的形式為:

name=string

注意:

賦值號的兩邊不允許有空格

如果賦給變數的值中包含空格、製表符或換行符,應使用雙引號

shell把未賦值的變數看成空字串

賦值號右邊沒有給出字串時,變數的值也為空

變數賦值後,可以通過在變數名前加$來引用變數

$name

如果變數名出現在乙個字串的中間,該變數前後還有其它一些字元,為了是變數名與其前後的字元分開,需要用花括號把變數名括起來$b

上式引用變數a

另外,唯讀變數不能用unset刪除。

有時我們希望在說明乙個變數並對它賦值之後就不再改變它的值,這時可以將變數定義為唯讀變數,其語法格式如下:

readonly namelist

例如:

lonfe@lonfe-laptop:~$ a=2

lonfe@lonfe-laptop:~$ readonly a

lonfe@lonfe-laptop:~$ echo $a

2lonfe@lonfe-laptop:~$ a=3

bash: a: 唯讀變數

lonfe@lonfe-laptop:~$

在bash中可以利用env命令列出所有的環境變數值。

shell執行使用者的命令時,把命令的第乙個字串作為執行程式名,用$0來引用。後面字串作為程式的引數,分別用$1-$9來引用。

因為只有9個位置變數,當程式的引數超過9個的時候就需要使用shell內部提供的shift命令。

shift命令的功能是將位置變數左移,格式如下:

shift [n]

set命令的功能是設定各種shell選項、位置變數及列出shell變數,其格式如下:

set [選項] [引數]

不帶任何選項及引數的set命令將顯示shell的全部變數。

set命令中鍵入的引數將依次賦值給位置變數$1-$9,$0不能用這種方法賦值。

另外,利用unset命令可以刪除變數的值,其格式如下:

unset [選項] 引數

在shell中還有一組特殊變數,這組變數由shell定義及設定,使用者只能引用這些變數,但不能重新設定它們。

特殊變數說明

$#命令列上的引數個數,但不包含$0

$?命令列的退出**,0表示成功,其它數值表示失敗

$$當前執行程式的程序號

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

$*命令列所有引數構成的乙個字串

$@命令列所有引數,但每個引數用引號括起來

$

若變數var有非空值則取var的值;否則取value的值,var的值不變

$

若變數var有非空值擇取var的值;否則取value的值,同時將var的值賦值為value

$

若變數var有非空值則取value的值;否則取var的值(即空值),且var的值不變

$

若變數var有非空值則取var的值;否則顯示錯誤資訊:var:message。

有些字元對shell有特殊含義,當使用者不需要這些字元的特殊含義時就要消除其特殊含義。消除特殊字元含義的機制稱為引用或轉義。

雙引號能消除大多數字元的特殊含義,但不能消除$(美元符號)、`(反引號)和/(反斜槓)的特殊含義。

單引號與雙引號的工作方式類似,但是單引號可以消除所有字元的特殊含義

反引號括起來的字元被shell解釋為命令。在執行時,shell首先執行該命令列,並以它的標準輸出結果取代整個反引號(包括兩個反引號)部分。

在bash只能進行兩個整數間的運算,其結果仍然為整數。要進行算術運算,需要使用expr命令或let命令。

expr命令的功能s是計算表示式的值。該命令將其引數看做表達算術式,它計算該表示式的值並將結果送到標準輸出裝置上,其語法格式如下:

expr 運算元 運算子 運算元

let是bash的內部命令,其功能與expr類似,也能計算算術表示式的值,其語法格式如下:

let 賦值表示式 [賦值表示式]

注意:

let支援c語言中的大部分整數運算,可以在表示式中直接使用變數,而不需要在其前面帶$符號。

當let計算表示式的值時,若最後乙個表示式的結果不為0則返回0值,否則返回1值。

條件語句test用來測試後面所給的條件表示式的真假。若為真則返回0,否則返回1。

test命令的一般格式為:

test 條件表示式

或者

[ 條件表示式 ]

注意:使用方括號時,要注意在條件兩邊加空格。

使用test命令可以進行多種型別的條件測試,包括:

字串測試

、數值測試

和檔案狀態測試。

表示式含義

sring1=string2

如果字串string1和string2相等,則結果為真

string1!=sring2

如果字串string1和string2不相等,則結果為真

test -n string

如果字串string的長度不為0,則結果為真

test string

如果字串string的長度為0,則結果為真

test -z string

如果字串string的長度不為0,則結果為真

表示式含義

int1 -eq int2

如果int1等於int2,則結果為真

int1 -ne int2

如果int1不等於int2,則結果為真

int1 -gt int2

如果int1大於int2,則結果為真

int1 -ge int2

如果int1大於等於int2,則結果為真

int1 -lt int2

如果int1小於int2,則結果為真

int1 -le int2

如果int1小於等於int2,則結果為真

表示式含義

-r file

如果檔案存在且可讀,則結果為真

-w file

如果檔案存在且可寫,則結果為真

-x file

如果檔案存在且可執行,則結果為真

-f file

如果檔案存在且為普通檔案,則結果為真

-d file

如果檔案存在且為目錄檔案,則結果為真

-z file

如果檔案存在且長度大於0,則結果為真

上述條件測試語句可以單獨使用,也可以通過邏輯運算子將它們組合起來使用。

表示式含義

!expr

非expr1 -a expr2

且expr1 -o expr2或

Shell Shell語言基礎練習

1 指定指令碼直譯器 bin sh bin bash usr bin env bash2 hello world!usr bin env bash echo hello,world 3 執行shell指令碼的5種方式,其中後兩種,需要先使指令碼有執行許可權 sh path to script.sh ...

eval併發 shell SHELL併發程式設計

shell的並行程式設計 通過啟用多個並行的後台子程序,實現任務的並行處理。併發程式設計的模式 簡單模式 批處理模式 輪詢模式 佇列模式 簡單模式 將多個任務放在後台,以子程序的方式進行執行。可以看成是簡單模式的併發程式設計。bin bash function log 2 dosleep 0.1 j...

Android tensorflow 基礎知識學習

今天記錄下tensorflow的一些基本知識 1.匯入tensorflow 庫,且指令碼中新增執行使用的python環境 user bin env python import tensorflow as tf 匯入tensorflow庫 匯入 mnist 資料集 資料在linux 根目錄 data下...