Shell腳本基礎筆記(1)

一、Bash中命令分割

每一個命令或是命令序列都是經過分號(;)或換行符來分隔java

$ cmd1 ;cmd2 shell

等價於express

$cmd1ubuntu

$cmd2數組

二、終端打印echo、printf

雙引號 --- 變量名替換;特殊字符序轉義字符(\)  -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

三、變量

3.一、變量賦值和判相等

var=valuecode

var = valuexml

3.二、變量繼承

export 變量名        :當前shell腳本執行的任何應用程序都會繼承這個變量

3.三、獲取變量長度      ${#變量名}

3.四、檢查是不是root用戶    $UID = 0  超級用戶

3.五、修改bash的提示字符    $SP1

3.六、判斷變量是否空  

${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

四、計算

4.1 let、$(())、$[] 

計算中變量'$'字符無關緊要。

包裹計算表達式的$(())、和$[]必須有'$'字符。

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

4.2 bc 高級數學運算

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

六、數組

1)普通數組

定義、使用、賦值、打印

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

2)關聯數組(必定要先聲明)

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
相關文章
相關標籤/搜索