Linux shell指令碼攻略學習
1.陣列有關:
(1)定義陣列,列印陣列
這些值將會儲存在以0為起始索引的連續位置上。
#!/bin/bash array_var=(1 2 3 4 5 6) array_y[0]="test1" array_y[1]="test2" array_y[2]="test3" array_y[3]="test4" index=3 echo $index echo ${array_y[$index]} echo ${array_y[3]} echo ${array_y[*]} echo ${array_var[3]} echo ${array_var[@]} echo ${#array_var[@]} array_va=(1 2 3 4 5 6 8 9 10) echo ${#array_va[*]}
結果如下:
列印$index的原因是我把index起始定義到了4,然後位置4是沒有值的,所以一直無法打印出來echo ${array_y[$index]},要注意一下這一點。
(2)定義關聯陣列
#!/bin/bash declare -A fruit_array aaa=(1 2 3 4 5) echo ${aaa[*]} fruit_array=([banana]='120 dollars' [xigua]='80 dollars') fruit_array[apple]='100 dollars' fruit_array[orange]='150 dollars' echo ${fruit_array[*]} fruit_array[banana]='180 dollars' #列印陣列內容 echo ${fruit_array[*]} #列印陣列的索引 echo ${!fruit_array[*]}
結果如下:
fruit_array=([banana]='120 dollars' [xigua]='80 dollars')在前,fruit_array[apple]='100 dollars'在後,陣列會是三個值。
fruit_array[apple]='100 dollars'在前,fruit_array=([banana]='120 dollars' [xigua]='80 dollars')在後,數組裡面只有banana和xigua,沒有apple。
2.使用別名
(1)建立一個別名
$alias ls='echo lslslslsl'
則再輸入ls命令,就不再是原來的作用了,會輸出lslslslsl
加上一個\對別名進行轉義,則可以起到原來的作用。
alias命令只是暫時的。關閉終端後,所設定過的別名就失效了。要一直起作用就放到~/.bashrc檔案中。
可以這樣操作:
echo 'alias ls="echo lalalalla"' >>~/.bashrc
如果發現還未生效使用:
source ~/.bashrc
(2)刪除別名可以使用unalias命令或者alias aaa=,會取消名為aaa的別名。
使用unalias命令:
對於一些還是有原有作用的別名,不建議使用alias aaa=
(因為類似於ls,是有原本的作用的,使用alias ls=後,連原本作用都失去了)
3.獲取終端資訊
(1)stty
選項 -echo禁止將輸出傳送到終端,而選項echo則允許傳送輸出。
在輸入密碼時,不顯示輸入內容demo:
#!/bin/sh
echo -e "Enter password:"
stty -echo
read password
stty echo
#echo $password
echo Password read.
(2)tput命令和在指令碼中生成延時:
echo -n Count:
#儲存游標位置
tput sc
count=0;
while true;
do
if [ $count -lt 40 ];
then
let count++;
sleep 1;
#恢復游標位置
tput rc
#清除
tput ed
echo -n $count;
else exit 0;
fi
done
*獲取終端的行數和列數:
tput cols
tput lines
*打印出當前終端名稱:
tput longname
*將游標座標移動到座標(100,100)處:
tput cup 100 100
*設定終端背景色和文字前景色
#n可以在0-7之間取值
#(0-黑色;1-藍色;2-綠色;3-青色;4-紅色;5-洋紅色;6-黃色;7-白色)
tput setab n
tput setaf n
*設定文字樣式為粗體
tput bold
*設定下劃線的起止
tput smul
tput rmul
4.獲取設定日期和延時:
(1)讀取日期:
$ date
2018年 11月 08日 星期四 14:40:10 CST
(2)讀取紀元時:(紀元時被定義為從世界標準時間1970年1月1日0時0分0秒起至當前時刻的總秒數)
$ date +%s
154165927
(3)獲取某個日期串的紀元時:
date --date "2018年 11月 08日 星期四 14:40:10 CST" +%s
1541679480
(4)獲取給定的日期格式:
date --date "2018年 11月 08日" +%A
星期四
(5)按照指定格式列印日期:
date "+%d %B %Y %A"
08 十一月 2018 星期四
(6)檢查一組命令所花費的時間:
秒級別和毫秒級別的方式:
#!/bin/bahs
start=$(date +%S)
echo $(date +%S)
echo $start;
echo "準備倒數5秒:"
for i in $(seq 5 -1 1)
do
#sleep在指令碼中生成延時
echo -en "$i";sleep 1
done
echo -e "開始"
end=$(date +%S)
difference=$((end - start))
echo Time taken to execute commands is $difference seconds.
start1=$(date +%s%N)
echo $start1
start_ms=${start1:0:16}
for i in $(seq 2 -1 1)
do
echo -en "$i";sleep 1
done
end1=$(date +%s%N)
end_ms=${end1:0:16}
echo "cost time is:"
echo "scale=6;($end_ms- $start_ms)/1000000" | bc
(7)日期格式表:
星期 | %a(例如:Sat) %A(例如:Saturday) |
月 | %b(例如:Nov) %B(例如:November) |
日 | %d(例如:31) |
固定格式日期(mm/dd/yy) | %D(例如:10/18/10) |
年 | %y(例如:10) %Y(例如:2010) |
小時 | %I或%H(例如:08) |
分鐘 | %M(例如:33) |
秒 | %S(例如:10) |
納秒 | %N(例如:695208515) |
Unix紀元時 | %s(例如:1290049486) |