shell程式設計變數和變數賦值
1、檢視所有的shell變數
set
2、檢視所有的只讀shell變數
readonly
3、變數設定值
格式:var_name=var_value
注意:=連線變數名和變數值,=兩側不能有空格;當值var_value含空格時,需要雙引號把var_value包起來
4、輸出變數值
echo $var_name
echo ${var_name}
5、變數值連線
echo $var_name1$var_name2
注意,兩個變數之間沒有空格
6、檢視所有環境變數
env
7、給環境變數設定值
VAR_NAME=VALUE
export VAR_NAME
8、清除變數
unset var_name
9、匯出變數到子指令碼中
父指令碼中定義好變數,然後 export var_name
子指令碼中可以使用該變數. $var_name或${var_name}
10、顯示指令碼執行狀態
11、指令碼執行的當前程序id執行完腳步,輸入 echo $?
注意:0,表示成功
12、傳遞給shell指令碼的引數個數$$
$#
13、反引號`
設定系統的命令輸出到變數
echo "shell file name is :`basename $0` "
14、以序列形式,列印當前整個目錄
echo *
15、替換運算子,
1) ${var_name:-def_Val}
如果變數var_name存在且為非null,返回該變數的值,否則返回預設值def-Val
注意var_name與:之間沒有空格,:與-之間可以有空格。主要用途,如果變數未定義,則用預設值.
2) ${var_name:=val}
如果變數var_name存在且為非null,返回該變數的值,否則,把val的值賦給變數var_name,並返回var_name的值val
注意var_name與:之間沒有空格,:與=之間也不能有空格。
3)${var_name:?message},
如果變數var_name存在且為非null,返回該變數的值,否則返回該變數的名字var_name:提示資訊meesage,並退出當前命令或指令碼
注意var_name與:之間沒有空格,:與?之間也不能有空格。
4) ${var_name:+val}
如果變數var_name存在且為非null,返回val,否則返回null
注意var_name與:之間沒有空格,:與+之間也不能有空格。
15、返回變數長度
${#val_name}
16、顯示所有命令列引數
$* 或 [email protected]
$* 和 [email protected] 的細微差別
從下面的例子中可以看出,如果是用冒號引起來,表示這個變數不用IFS替換!!所以可以看到這個變數的"原始值"。反之,如果不加引號,輸出時會根據IFS的值來分割後合併輸出! $* 是按照IFS中的第一個值來確定的!下面這兩個例子還有細微的差別!
- $ IFS=:;
- $ set x y z
- $ echo $*
- x y z
- $ echo "$*"
- x:y:z
- $ echo [email protected]
- x y z
- $ echo "[email protected]"
- x y z
上例 set 變數其實是3個引數,而下面這個例子實質是2個引數,即 set "x y z" 和 set x y z 是完全不同的。
[plain] view plaincopyprint?- $ set "x" "y z"
- $ echo $*
- x y z
- $ echo "$*"
- x:y z
- $ echo [email protected]
- x y z
- $ echo "[email protected]"
- x y z
- $ echo $* |od -b
- 0000000 170 040 171 040 172 012
- 0000006
- $ echo "$*" |od -b
- 0000000 170 072 171 040 172 012
- 0000006
小結:$* 會根據 IFS 的不同來組合值,而 [email protected] 則會將值用" "來組合值!
17、算術運算操作 $(())
$((var1 opr var2))
只能是+-*/ 和()運算子,並且只能做整數運算
例如: $((5+1))
18、命令代換$()
類似於 反引號`
例如:echo $(date)
給變數賦值
1. Shell中的變數型別
Shell中的變數可以分為環境變數、位置變數、預定義的特殊變數以及使用者自定義變數、
環境變數
Shell中的環境變數是一類Shell預定義變數,是用於設定系統執行環境的變數,環境變數由系統統一命名。部分系統變數的值由系統設定,部分環境變數的值可以由使用者給定。
環境變數的名稱由大寫字母組成,常用的Shell環境變數如下所示:
HOME: 使用者主目錄的全路徑名,cd $HOME 即可切換到使用者的主目錄
PATH: 類似於windows下的路徑,Shell會在裡面依次尋找二進位制的可執行檔案。
echo $PATH可以顯示當前的PATH,新增新的PATH方法 $PATH=$PATH:新PATH
TERM: 終端型別 echo $TERM
PS1: 提示符,root使用者預設為#,普通使用者預設為$
SHELL: Shell直譯器的絕對路徑
LOGNAME: 登入使用者的使用者名稱
UID: 當前使用者的UID echo $UID
位置變數
位置變數是根據出現在命令列上的引數的位置確定的變數,在呼叫Shell程式的命令列中,引數的位置定義如下所示。
$命令 引數1 引數2 引數3
其中 $0 對應 執行的命令名
$1 對應 引數1
$2 對應 引數2
$3 對應 引數3
(一定要搞清楚順序!!)
預定義的特殊變數
預定義的特殊變數有著特殊的含義,使用者不可以更改,所有的預定義變數都由“$”符號和另外一個符號組成,常用的預定義特殊變數如下所示
$#: 位置引數個數(不包括Shell指令碼名)
$*: 位置引數組成的字串
$!: 上一個後臺命令對應的程序號
$?: 上一個命令的退出狀態,為十進位制數字,如果返回為0,則代表執行成功。
$$: 當前的程序號PID
使用者自定義變數 (大小寫敏感)
要求: 變數名由字母或者下劃線開頭,後面跟任意數量的字母、數字、下劃線。
合法的:
_name SIZE my_idea
非法的:
2god !name hello&world
變數的建立
有兩個內建的命令declare 和 typeset 可用於建立變數。通過命令的選項設定還可以設定變數的建立方。
除了使用內建命令來建立和設定變數外,還可以直接賦值,格式為:
變數名=變數值
value1=$1
注意:變數名前面不應加美元“$”符號。(和PHP不同)
等號“=”前後不可以有空格。
和C語言不同,Shell中不需要顯式的語法來宣告變數。
變數名不可以直接和其他字元相連,如果想相連,必須用括號:echo “this is $(he)llo!”
變數的刪除
系統提供unset命令可以刪除變數,例如
unset name
變數的賦值
變數的賦值有五種:使用read命令,直接賦值,使用命令列引數,使用命令列的輸出結果,從檔案讀取。
先說一下從read命令吧:(主要是在需要互動時使用)
Read命令是系統內建命令,語法格式為:
read 變數1 變數2
當Shell指令碼執行到read命令時,將暫停指令碼的執行並等待鍵盤的輸入,當用戶輸入完畢並且敲下回車之後,將完成賦值操作,指令碼繼續執行。
Read指令的規則:
多個數據或變數之間用空格隔開
若變數個數與資料個數相等時,對應取值
若變數個數大於資料個數時,沒有輸入資料的變數取空值
若變數個數小於資料個數時,將多餘的資料賦給最後一個變數(也就是把空格當成字串處理)
例子:
#!/bin/bash
echo –n “ please enter your name” //-n 表示使用者輸入和提示資訊在同一行
read name
echo “your name is $name”
#!/bin/bash
echo “Please enter your first name and last name :”
read first last
echo “your first name is $first”
echo “your last name is $last”
第二種賦值方法就是直接給變數賦值(這種賦值方法主要是在不需要互動時,並且引數不需要修改時使用)
例如:name=xiaosu
gender=man
第三種賦值方法是使用命令列引數賦值。(這種賦值方法是引數需要經常變化,並且不需要互動時使用)
value1=$1
這種賦值方法,也就是直接在命令後面跟引數,然後系統用$1來引用第一個引數。
第四種方法是利用命令的輸出結果賦值(這種賦值方法可以直接處理上個命令產生的資料)
在Shell程式中,可以將一個命令的輸出結果來當做變數,不過需要在賦值語句中使用反引號
例如currentdir=`pwd`
echo $currentdir
最後一種賦值方法是從檔案中讀入資料
這種方式就適合處理大批量的資料,直接把相應的資料寫入檔案,然後執行指令碼即可。
通常是通過while迴圈一行行讀入資料,即沒迴圈一次,就從檔案中讀取一行資料,直到讀取到檔案的結尾。
例如:
#!/bin/bash
ls *.sh >execfile
while read LINE
do
chmod a+x $LINE
done<execfile
這個指令碼使用了while..do..done 結構,最後一行表示從檔案execfile讀取資料。while read LINE表示 每次迴圈讀入一行資料並賦值給變數LINE。
變數的輸出
最簡單的方法就是使用echo
如果想輸出格式化的字串,就需要使用printf,用法和C語言類似
printf 命令的格式說明符
\” 輸出雙引號
\\ 輸出反斜槓
\a 響鈴
\n 換行
\r 回車
相關推薦
shell程式設計變數和變數賦值
1、檢視所有的shell變數 set 2、檢視所有的只讀shell變數 readonly 3、變數設定值 格式:var_name=var_value 注意:=連線變數名和變數值,=兩側不能有空格;當值var_value含空格時,需要雙引號把var_value
shell 指令碼中將輸出內容賦值給一個變數時的換行問題(git tag命令內部有less命令)
shell 指令碼中將輸出內容賦值給一個變數時的換行問題(git tag命令內部有less命令) 參考網址 shell 指令碼中將輸出內容賦值給一個變數時的換行問題 注意git tag命令內部有less命令 示例 msg=`git tag` && echo "$m
php入門變數之變數的間接引用、連線字串和連線賦值運算子
【1】變數的間接引用: <?php $a = 'b'; $$a = '123'; echo $b; ?> 上面的輸出結果是123 我們可以看到在第二行程式碼中多了一個$,並通過指定的名稱訪問變數,指定的名字儲存在$a('b')中,並把這個變數
【NOI OpenJudge】【1.2】程式設計基礎之變數定義、賦值及轉換
01: 整型資料型別儲存空間大小 #include<cstdio> int main(){ int a; short b; printf("%d %d",sizeof(a),sizeof(b)); return 0; } 02: 浮點型資料型別儲存空間大小
shell指令碼專家指南筆記#6_測試變數和設定預設值
## # 本文為《shell指令碼專家指南》一書的學習筆記。 ## 6. 測試變數和設定預設值 6.1. 設定預設值 設定變數預設值的幾種形式,複雜程度遞減。 # if [ -z "$var" ]; then
shell 變數的條件賦值
${變數1:+- 變數2}; (1) 冒號後面是“-”的話,或者沒有(預設是“-”) 表示, 如果變數1的值為空, 就是使用變數2的 (2) 冒號後面是“+”的話, 表示變數不為空時, 使用變數2的值 這裡的變數2可以是常量, 或者$變數
Shell程式設計---source 和 ./ 和sh 執行指令碼的區別 & 更新環境變數
執行shell指令碼一般有三種方式:sh,./ 和 source。 sh 和 ./ 功能差不多,./不能執行沒有執行許可權的指令碼,而sh可以;兩者都是繼承父shell在子shell環境中執行指令碼,執行完畢後不帶回父shell環境中。 source 或者
shell讀取一個檔案內容到變數並逐一賦值
sys_info=$(cat /usr/local/sysconfig.txt) var=`echo $sys_info | awk -F ', ' '{print $0} '
【shell】Linux shell 直接賦值和間接賦值
shell linux 變量 運維 什麽是直接賦值? 1.作者直接賦予參數值的方式稱為直接賦值。 2.一般來說,由交互的方式賦值為間接賦值。 例1: varl=arppinging.com 這種就是直接賦值,由編程作者直接賦予固定的值。 例2: [root@arppinging ~]# re
R語言-迴圈產生變數名並賦值,應用到 ggolot2 迴圈作圖
問題的起源來自,想要批量出數十張組合好的圖。 實現過程中,最大的問題是如何實現:迴圈產生變數名,並對其將ggplot的一長段作圖程式碼傳送給該變數名。 最終使用assign函式解決了 首先產生1000個字串格式的備用變數名: p <- c(paste0('p
反射如何取得變數和變數的值 從引數object中取值
今天寫專案用到了pdf的生成需要從Object中取得傳的值填寫到pdf中 最後決定使用反射 新增測試類 public class User { private Integer id; private String name;
Python函式中的變數和函式返回值
1.函式的變數 區域性變數和全域性變數: Python中的任何變數都有特定的作用域 在函式中定義的變數一般只能在該函式內部使用,這些只能在程式的特定部分使用的變數我們稱之為區域性變數 在一個檔案頂部定義的變數可以供檔案中的任何函式呼叫,這些可以為整個程式所使用的變數稱為全域性變數。
JavaScript中 ES6變數的結構賦值
變數的結構賦值使用者很多 1、交換變數的值 let x = 1; let y = 2; [x,y] = [y,x] 上面的程式碼交換變數x和變數y的值,這樣的寫法不僅簡潔,易讀,語義非常清晰 2、從函式返回多個值 函式只能返回一個值,如果要返回多個值,只能講他們放在陣列或者物件裡返回。瞭解 解構賦值 ,取值
go語言漸入佳境[3]-變數宣告與賦值
變數 變數是記憶體當中一段空間的抽象描述。變數的型別明確了空間的大小以及空間如何解析。 Go中的變數型別 1 bool byte complex64 complex128 error float32 float64 int int8 int16 int32 int64
nodejs中的變數解構賦值
所謂的解構賦值,就是把 某個物件中的屬性,當作變數,給解放出來,這樣,今後就能夠當作變數直接使用了 可以使用 : 為解構出來的變數重新命名 const person = { name: 'zs', age: 22, gender:
Tensorflow: 動態的給變數tf.Variable賦值【tf.assign】
Motivation 錯誤: tensorflow不能直接給Variable賦值,比如: embedding_var = tf.Variable(1) test_var = 10 embedding_var = test_var 或者: embedding_var = tf
變數解耦賦值
本來一直用得好好的 let [x,y,z] = [1,2,3]; 直到看見了這玩意?? let obj = { h:[ 'hello',
go語言基礎之匿名變數和多重賦
1、匿名變數 package main //必須有一個main包 import "fmt" func test() (a, b, c int) { return 1, 2, 3 } func main() { var c, d, e int c, d, e = test
ES6 變數宣告與賦值:值傳遞、淺拷貝與深拷貝
ES6 變數宣告與賦值:值傳遞、淺拷貝與深拷貝詳解轉載於王下邀月熊_Chevalier的現代 JavaScript 開發:語法基礎與實踐技巧系列文章。 變數宣告與賦值 ES6 為我們引入了 let 與 const 兩種新的變數宣告關鍵字,同時也引入了塊作用域;本文
兩個結構體變數的相互賦值
兩個結構體變數中包含的型別相同 func DeepFields(ifaceType reflect.Type) []reflect.StructField { var fields []reflect.StructField for i := 0; i