1. 程式人生 > >Linux shell指令碼攻略學習

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)