每一個命令或是命令序列都是經過分號(;)或換行符來分隔java
$ cmd1 ;cmd2 shell
等價於express
$cmd1ubuntu
$cmd2數組
雙引號 --- 變量名替換;特殊字符序轉義字符(\) -e才生效bash
單引號 --- 變量名不會被擴展,依照原樣輸出;特殊字符序轉義字符(\) -e才生效app
m11@xubuntu:~$ echo -e "aaa\nbbb" aaa bbb m11@xubuntu:~$ echo -e 'aaa\nbbb' aaa bbb
printf --- 按格式打印字符串 spa
root@dxx-VirtualBox:~# printf "%-5s %-10s %-4.2f\n" $var bbb 1.123456 aaaa bbb 1.12
var=valuecode
var = valuexml
export 變量名 :當前shell腳本執行的任何應用程序都會繼承這個變量
${parameter:+expression} : 若是parameter有值且不爲空,則賦expression的值
root@xubuntu:/home/m11# aaa="bbb"&&echo ${aaa:+"----"} ---- root@xubuntu:/home/m11# aaa=""&&echo ${aaa:+"----"}
${parameter:=expression} : 若是parameter爲空,則賦expression的值;不爲空,則使用原值
root@xubuntu:/home/m11# aaa=""&&echo ${aaa:="----"} ---- root@xubuntu:/home/m11# aaa="aaa"&&echo ${aaa:="----"} aaa
計算中變量'$'字符無關緊要。
包裹計算表達式的$(())、和$[]必須有'$'字符。
root@xubuntu:/home/m11# aa=111;bb=222 && let rs=aa*bb && echo $rs 24642 root@xubuntu:/home/m11# aa=111;bb=222 && let rs=$aa*bb && echo $rs 24642 root@xubuntu:/home/m11# aa=111;bb=222 && let rs=[aa*bb] && echo $rs bash: let: rs=[aa*bb]: syntax error: operand expected (error token is "[aa*bb]") root@xubuntu:/home/m1# aa=111;bb=222 && let rs=$[aa*bb] && echo $rs 24642 root@xubuntu:/home/m11# aa=111;bb=222 && let rs=$[$aa*bb] && echo $rs 24642 root@xubuntu:/home/m11# aa=111;bb=222 && let rs=(($aa*bb)) && echo $rs bash: syntax error near unexpected token `(' root@xubuntu:/home/m11# aa=111;bb=222 && let rs=$(($aa*bb)) && echo $rs 24642 root@xubuntu:/home/m11# aa=111;bb=222 && let rs=$((aa*bb)) && echo $rs 24642
echo "4 * 5" |bc echo "scale=2;3/8 " |bc 設置小數精度爲2 aaa=10;echo "obase=2;$aaa " |bc 進制轉換爲二進制 echo "sqrt(100)" |bc 平方根 echo "10^2" |bc 平方
0 stdin
1 stdout
2 stderr
> 只將標準輸出進行重定向,等價於 1>
2> 只將錯誤輸出進行重定向
2> xxx 1> xxx1 將錯誤輸出到xxx中,將標準輸出到xxx1中
1> test 2>&1 將將標準輸出到test中,而且錯誤輸出傳遞給1輸出通道 等價於&> test
tee 將數據重定向到文件中,同時提供數據副本做爲後續命令的stdin
cat<<END 將END間的數據都當作數據
#!/bin/bash cat<<END <xml>adsfasdf <h1>asdfasdf </h1> </xml> END
定義、使用、賦值、打印
arry=(1 2 3 4 ) root@xubuntu:/home/m11/test# echo ${arry[2]} 3 root@xubuntu:/home/m11/test# echo ${arry[*]} 1 2 3 4 root@xubuntu:/home/m11/test# echo ${arry[@]} 1 2 3 4 root@xubuntu:/home/m11/test# arry[1]=12 root@xubuntu:/home/m11/test# echo ${arry[@]} 1 12 3 4 root@xubuntu:/home/m11/test# echo ${#arry[*]} 4
root@xubuntu:/home/m11/test# declare -A ass_arry root@xubuntu:/home/m11/test# ass_arry=([name]="dxx" [age]="12") root@xubuntu:/home/m11/test# echo ${ass_arry[name]} dxx root@xubuntu:/home/m11/test# echo ${!ass_arry[*]} name age root@xubuntu:/home/m11/test# echo ${!ass_arry[@]} name age
root@xubuntu:/home/m11/test# alias lh='ls -lh' 定義別名 root@xubuntu:/home/m11/test# unalias lh 刪除別名
忽略別名,使用轉義字符 '\' ,格式 \ command
pgrep 進程名字 :獲取進程的PID
cat /proc/1977/environ :查看1977進程的環境變量
root@dxx-VirtualBox:~# pgrep nm-applet 1977 root@dxx-VirtualBox:~# cat /proc/1977/environ GNOME_KEYRING_PID=USER=dxxLANGUAGE=en_USLC_TIME=zh_CN.UTF-8XDG_SEAT=seat0JAVA_TOOL_OPTIONS=-javaagent:/usr/share/java/jayatanaag.jar XDG_SESSION_TYPE=x11COMPIZ_CONFIG_PROFIL