前兩個沒什麼好說的,下面說一下後面兩個:
《輸入重定向的格式為:
命令 < 檔名似乎後面的「檔名」不能再為命令了。 可以用管道實現類似功能。
《輸入從定向被成為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下...