1. 程式人生 > >shell指令碼中的數學運算,重定向,alias

shell指令碼中的數學運算,重定向,alias

1. 整數運算:


#!/bin/bash
num1=4
num2=5


let result1=num1+num2
echo $result1


let num1++
let num2--


result2=$[ num1 + num2 ]


result3=$[ $num1 + 10 ]


echo $result2
echo $result3






result4=`expr 3 + 4`
echo $result4


2. 檔案描述符和重定向


 0 —— stdin(標準輸入)。
 1 —— stdout(標準輸出)。
 2 —— stderr(標準錯誤)。


在命令執行之後立刻執行echo $?,就可以打印出退出狀態


你可以將stderr單獨重定向到一個檔案,將stdout重定向到另一個檔案:
$ cmd 2>stderr.txt 1>stdout.txt
還可以利用下面這個更好的方法將stderr轉換成stdout,使得stderr和stdout
都被重定向到同一個檔案中:
$ cmd 2>&1 output.txt
或者這樣:
$ cmd &> output.txt


tee命令接收到來自stdin的資料。它將stdout的一份副本寫入
檔案out.txt,同時將另一份副本作為後續命令的stdin。命令cat -n將從stdin中接
收到的每一行資料前加上行號並寫入stdout:
$ cat a* | tee out.txt | cat -n
cat: a1: Permission denied
1a1
2a1
檢視out.txt
$ cat out.txt
a1
a1
注意,cat: a1: Permission denied 並沒有在檔案內容中出現。這是因為這些
資訊屬於stderr,而tee只能從stdin中讀取。
預設情況下,tee命令會將檔案覆蓋,但它提供了一個-a選項,用於追加內容。例
如:$ cat a* | tee -a out.txt | cat –n


(7) 我們可以使用stdin作為命令引數。只需要將-作為命令的檔名引數即可:
$ cmd1 | cmd2 | cmd -
例如:
$ echo who is this | tee -
who is this
who is this
也可以將 /dev/stdin作為輸出檔名來代替stdin。
類似地,使用 /dev/stderr代表標準錯誤,/dev/stdout代表標準輸出。這些特殊的裝置
檔案分別對應stdin、stderr和stdout。
處理錯誤時,來自stderr的輸出被丟棄到檔案/dev/null中。/dev/null是一個特殊的裝置檔案,
它接收到的任何資料都會被丟棄。


將指令碼內部的文字塊進行重定向
有時候,我們需要對文字塊(多行文字)進行重定向,就像對標準輸入做的那樣。考慮一個
特殊情況:源文字就位於shell指令碼中。一個實用的例子是向log檔案中寫入頭部資料,可以按照下
面的方法完成:
#!/bin/bash
cat<<EOF>log.txt
LOG FILE HEADER
This is a test log file
Function: System statistics
EOF
在cat <<EOF>log.txt與下一個EOF行之間的所有文字行都會被當做stdin資料。log.txt
檔案的內容列印如下:
$ cat log.txt
LOG FILE HEADER
This is a test log file
Function: System statistics


array.sh
#!/bin/bash
array=(1 2 3)
echo ${array[0]}


index=2
echo ${array[$index]}


echo ${array[*]}
echo ${array[@]}


echo ${#array[*]}


舉個例子,試想如何用關聯陣列為水果制定價格:
$ declare -A fruits_value
$ fruits_value=([apple]='100dollars' [orange]='150 dollars')
用下面的方法顯示陣列內容:
$ echo "Apple costs ${fruits_value[apple]}"
Apple costs 100 dollars


列出陣列索引
每一個數組元素都有一個索引用於查詢。普通陣列和關聯陣列具有不同的索引型別。我們可
以用下面的方法獲取陣列的索引列表:
$ echo ${!array_var[*]}
也可以使用:
$ echo ${!array_var[@]
以先前提到的fruits_value陣列為例,執行如下命令:
$ echo ${!fruits_value[*]}
orange apple
對於普通陣列,這個方法同樣可行。


alias命令的作用只是暫時的。一旦關閉當前終端,所有設定過的別名就失效了。
為了使別名設定一直保持作用,可以將它放入~/.bashrc檔案中。因為每當一個新
的shell程序生成時,都會執行 ~/.bashrc中的命令。
$ echo 'alias cmd="command seq"' >> ~/.bashrc
(3) 如果需要刪除別名,只用將其對應的語句(如果有的話)從 ~/.bashrc中刪除,
或者使用unalias命令。或者使用alias example=,這會取消名為example
的別名。
(4) 我們可以建立一個別名rm,它能夠刪除原始檔案,同時在backup目錄中保留副本:
alias rm='cp
[email protected]
~/backup && rm [email protected]'

相關推薦

shell指令碼數學運算定向alias

1. 整數運算:#!/bin/bashnum1=4num2=5let result1=num1+num2echo $result1let num1++let num2--result2=$[ num1 + num2 ]result3=$[ $num1 + 10 ]echo $

Linux編程 22 shell編程(輸出和輸入定向管道數學運算命令退出腳本狀態碼)

tab test $? per width 可能 註意 ble 保存 1. 輸出重定向   最基本的重定向是將命令的輸出發送到一個文件中。在bash shell中用大於號(>) ,格式如下:command > inputfile。例如:將date命令的輸出內容,

shell指令碼函式呼叫的返回值以及退出狀態問題

     最近開始學習shell指令碼,由於之前沒怎麼接觸過linux和shell,所以一切從頭開始學起      shell指令碼編寫方法與程式設計類似,只是趨向於面向物件程式設計(個人理解,如果錯誤,麻煩各位老鳥指出)。其他關於shell指令碼到底是怎麼樣的一個東西大家

管道輸出管道定向grep

opera -i 執行 tor 小於號 a-z passwd tail operator 輸出:大於號:將一條命令執行結果(標準輸出,或者錯誤輸出,本來都要打印到屏幕上面的)重定向其它輸出設備(文件,打開文件操作符,或打印機等等)> 是覆蓋原有內容>> 是

Servlet--超鏈接表單提交定向轉發4種情況的路徑

str action local white 一句話 ont java ons isp 實際編碼中我們常常寫路徑,寫路徑既能夠寫相對路徑,也能夠寫絕對路徑。我2年曾經我就養成了習慣。僅僅要是寫路徑我從來都是寫絕對路徑,由於萬一將來我們的項目的文件夾發生變化。原來要是

Servlet--超連結表單提交定向轉發4種情況的路徑

實際編碼中我們經常寫路徑,寫路徑既可以寫相對路徑,也可以寫絕對路徑。我2年以前我就養成了習慣,只要是寫路徑我從來都是寫絕對路徑,因為萬一將來我們的專案的目錄發生變化,原來要是寫相對路徑的話就會有路徑依賴關係,改的地方太多了。而且相對路徑在某些情況下還有點特殊,有的是相對於原

nginx 反向代理負載均衡定向讀寫分離

一.nginx反向代理 配置檔案nginx.conf 在server裡面增加一條location:         location /test {                 proxy_pas

Linux程式設計 22 shell程式設計(輸出和輸入定向管道數學運算命令退出指令碼狀態碼)

1. 輸出重定向 最基本的重定向是將命令的輸出傳送到一個檔案中。在bash shell中用大於號(>) ,格式如下:command > inputfile。例如:將date命令的輸出內容,儲存到指定的輸出檔案中。      如果檔案已存在,重定向操作符會用新的檔案資料覆蓋已有檔案。這種情況下可以用

shell輸入輸出定向>、>>、<、<<、>/dev/null、2>&1、<<end、<<EOF等

轉載自:https://www.jb51.net/article/106373.htm https://blog.csdn.net/qq_31073871/article/details/80810306 其他參考:www.runoob.com/linux/linux-shell-io-re

shell輸入輸出定向>、>>、<、<<、>/dev/null、2>&1、<<end、<<EOF等

實際上,輸入輸出重定向中的3個標準檔案描述符,輸入0、正常輸出1、錯誤輸出2,這三個值經常被省略。 舉例: ls > shell_out 等價於: ls 1> shell_out 前言 相信大家經常能在shell指令碼中發現>/dev/nu

關於 shell 指令碼 定向檔名帶問號的解決辦法

1. 如果你的 shell 指令碼內容如下 ./format -format ./format_model--input data.txt > result.txt[注意這裡直接回車換行了] echo 'complete' 上面重定向後的 result.txt

(轉)linux sudo 定向實現只有系統管理員才有權限操作的文件寫入信息

shel echo 命令 文件 sudo 命令 方式 符號 iss 字串 chown 眾所周知,使用 echo 並配合命令重定向是實現向文件中寫入信息的快捷方式。 本文介紹如何將 echo 命令與 sudo 命令配合使用,實現向那些只有系統管理員才有權限操作的文件中寫入信

shell 命令別名通配符定向

star 之間 grep yum vim tar repo 時間 art shell 是一個命令解釋器,提供用戶和機器之間交互支持特定語法,邏輯判斷、循環每個用戶都可以有自己特定的shellcentos7 默認shell為bash還有zsh、kshyum list|grep

20.Shell介紹,history,Tab鍵通配符定向

echo slim 系統 重新 上一條 變量 分享圖片 三次 ali 五周第三次課(1月10日) 8.1 shell介紹 8.2 命令歷史 8.3 命令補全和別名 8.4 通配符 8.5 輸入輸出重定向 shell介紹 shell是一個命令解釋器,提供用戶和機器之間的交

shell特性、通配符、輸入輸出定向命令歷史

comm 解釋 指令 alias命令 命令補全和別名 zsh 開頭 命令 匹配 一:shell介紹 shell是一個命令解釋器,提供用戶和機器之間的交互,支持特定語法,每個用戶都可以有自己特定的shell,centos默認為bash,還有zsh,ksh等。 二:命令歷史 h

shell指令碼如何處理浮點運算

bash中不能處理浮點運算 let只能處理整數運算 要想處理浮點運算,可以藉助bc 或者 awk #!/bin/bash num="0.5" num1="6" #sacle用於控制小數點後出現的位數 tmp=$(echo "scale=2;$n

轉發定向的路徑問題以及兩者的區別用法

一:轉發的時候不需要加web應用名稱,因為轉發請求的是內部資源。例如:使用者登入-->從action中的LogServlet轉發到http://localhost:8080/newlib/reader/readerMain_r.jsp時:1.使用絕對路徑(/代表web應用名稱)request.getRe

定向轉發關於路徑問題的總結

①絕對路徑與相對路徑的區分: 絕對路徑為前面加上了“/”的路徑,而相對路徑則前面沒有加上“/”。 ②轉發與重定向中的具體討論:          轉發:轉發當中使用帶“/”的絕對路徑時,表示的是當前web應用的根目錄再加上傳入的目錄,因為轉發是在伺服器內部進行的,寫絕對路徑

shell指令碼的數值運算

shell中的變數沒有如c語言中字元型、整型、浮點型的區分,預設將變數賦值當做字元,怎樣才能讓shell將變數賦值當做數值型呢,答案是用$ 和[], []包含的數學算式可以被shell正確識別。 例1: [[email protected] ~]# cat  

shell 指令碼grep無法讀取前一個命令結果輸出的一個原因

前幾天,因為要實現一個小功能,想用shell指令碼來寫點邏輯。遇到一個問題這裡記錄分享一下: 檢視so檔案中是否有未實現的函式,使用ldd檢視,結果如下: 我想通過獲取ldd -r命令的結果中是否存在“undefined symbol"這樣的結果。很自然會想到使用