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
。