linux shell 學習一


1. 終端打印 命令 echo

echo "字符串"

str="hello word"

echo $str 或者 echo ${str}

str="hello world!" 執行報錯 -bash: !": event not found 

對於有"!"符號的輸出,可以在echo之前,執行 set +H 命令,然后再echo輸出.

2.終端打印命令 printf

printf "%-5s %-10s %-4.2f\n" 1 james 90.5789

%s, %c, %d, %f都是格式替代符號.

對於echo或printf中的標志(-e, -n等);

轉義換行符

echo -e "1\t2\t3"

打印色彩輸出

echo -e "\e[1;31m this is red text \e[0m"

3.環境變量

$PATH, $HOME, $PWD, $USER, $UID, $SHELL等.

4.獲得字符串長度

echo ${#變量名}

例如: s="test"

echo ${#s}  返回結果:4

5.識別當前shell版本

echo $0 或者 echo $SHELL

6.算術運算

在Bash shell環境中,可以利用let, (( ))和[ ]執行基本的算數操作.而在進行高級操作時,expr和bc這兩個工具也會非常有用.

let n=1+5

echo $n

let n++

let n--

let n+=6

n=$[ 1+5 ]

n=$(( 1+5 ))

n=`expr 3 + 4`

以上不支持浮點數,只用於整數運算.

bc是一個用於數據運算的高級工具,可以借助它執行浮點數運算.

echo "4 * 0.56" | bc

no=58

result=`echo "$no * 1.5" | bc`

echo $result

(1).設定小數精度(參數scale=2將小數位個數設置為2)

echo "scale=2;3/8" | bc

(2).進制轉換(參數obase=2,表示幾進制,2表示二進制)

no=100

echo "obase=2,$no" | bc

(3).計算平方以及平方根

echo "sqrt(100)" | bc

echo "10^3" | bc

7.文件描述符和重定向

文件描述符是與文件輸入,輸出相關聯的整數,用來跟蹤已打開的文件,最常見的文件描述符

0 --- 標准輸入(stdin)

1 --- 標准輸出(stdout)

2 --- 標准錯誤(stderr)

(1)用下面的方法可以將輸出文件重定向或保存到一個文件中

echo "this is a sample text 1" > temp.txt

echo "this is a samle text 2" >> temp.txt

>和>>不相同, >表示先清空再寫入內容; >>表示將內容追加到現有文件的尾部.

重定向操作符操作默認使用標准輸出, >等同於1>; >>等同於1>>;

ls +  該命令會報錯

ls + 2> out.txt

cmd 2>stderr.txt 1>stdout.txt

cmd &> output.txt

如果你不想讓終端中的出錯信息,可以將這些錯誤信息重定向到/dev/null.

這樣意味着來自stderr的輸出被丟到文件/dev/null中, /dev/null是一個特殊的設備文件,這個文件被接收到任何數據都會被丟棄,因此,null設備通常也被稱為位桶或黑洞.

要在終端中打印stdout,同時將它重定向到一個文件中,可以使用tee:

command | tee file1 file2

例如:

echo "test" > atest.txt

cat atest.txt | tee out.txt | cat -n

以上命令表示打印文件atest.txt內容的同時,將該文件的內容的副本存入文件out.txt.

我們可以使用stdin作為命令參數.

cmd1 | cmd2 | cmd3

例如:

echo who is this | tee -

類似的, 使用/dev/stderr代表標准錯誤, dev/stdout代表標准輸出.

將文件重定向到命令 $cmd < file, 可以借助於重定向,像使用stdin那樣從文件讀取數據.

exec 3< out.txt

cat <&3

exec 5>input.txt

echo newline >&5

cat input.txt

exec 5>>input.txt

echo append line >&5

cat input.txt

8.數組

array_var=(1 2 3 4 5 6) --用空格分隔

另外還可以這樣初始化數組, array_var[0]="test1"

打印特定索引的數組元素 echo ${array_var[0]}

如index=5

echo ${array_var[$index]}

以清單形式打印數組中的所有值: echo ${array_var[*]}  或者 echo ${array_var[@]}

打印數組長度: echo ${#array_var[*]} 或者 echo ${#array_var[@]}

9.關聯數組

關聯數組從Bash4.0開始引入,在關聯數組中,我們可以用任意的文本作為數組索引,而普通數組中只能用整數做為索引.

聲明關聯數組 declare -A ass_array

ass_array=([index1]=val1 [index2]=val2)

declare -A fruits_value

fruits_value=([apple]='100 dollars' [orange]='150 dollars')

echo "apple costs ${fruits_value[apple]}"

apple costs 100 dollars

echo ${!fruits_value[*]}

orange apple

echo ${fruits_value[*]}

150 dollars 100 dollars

10.別名

alias new_command='command sequence'

alias t='ll'

alias命令的作用只是暫時的,一旦關閉當前終端,所有設置過的別名就失效了.為了使別名設置一直保持作用,可以將它放入~/.bashrc文件中.因為每當一個新的shell進程生成時,都會執行~/.bashrc 中的命令.

echo 'alias cmd="command seq"' >> ~/.bashrc

我們可以創建一個別名rm,它能夠刪除原始文件,同時在backup目錄中保留副本.

alias rm='cp $@ ~/backup; rm $@'

11.獲取終端信息

tput和stty是兩款終端處理工具.

獲取終端的行數和列數:

tput cols

tput lines

打印出當前終端名:

tput logname

將光標移動到方位(100,100)處:

tput cup 100 100

刪除當前光標位置到行尾的所有內容:

tput ed

保存當前光標位置,要保存當前的光標位置,請包括 sc 選項或“save cursor position”。:

tput sc

在顯示了這些信息之后,光標必須返回到使用 tput sc 保存的原始位置。要使光標返回到其上次保存的位置,請包括rc 選項或“restore cursor position”。

tput rc

用tput清除終端數據:

清除從當前光標位置到行尾的數據,可以使用tput el。要清除從當前光標位置到設備末尾的數據,可以使用tput ed。如果您想要清除整個設備,請使用tput clear

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM