shell實例100例《四》

注意  :     在VIM中使用set paste格式化vim,再粘貼內容,格式就不會亂html

關係運算符mysql

運算符 說明 舉例
-eq 檢測兩個數是否相等,相等返回 true [ $a -eq $b ] 返回 false。
-ne 檢測兩個數是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 檢測左邊的數是否大於右邊的,若是是,則返回 true。 [ $a -gt $b ] 返回 false。
-lt 檢測左邊的數是否小於右邊的,若是是,則返回 true。 [ $a -lt $b ] 返回 true。
-ge 檢測左邊的數是否大於等於右邊的,若是是,則返回 true。 [ $a -ge $b ] 返回 false。
-le 檢測左邊的數是否小於等於右邊的,若是是,則返回 true。 [ $a -le $b ] 返回 true。
運算符 說明 舉例
! 非運算,表達式爲 true 則返回 false,不然返回 true。 [ ! false ] 返回 true。
-o 或運算,有一個表達式爲 true 則返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 與運算,兩個表達式都爲 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

-lt                #表示小於linux

-gt                  #表示大於nginx

-eq                  #表示等於git

-qw              #表示是否github

-ne               #表示非、不等於正則表達式

-ge               #表示 大於等於sql

-b                  #表示判斷是否是shell

字符串運算符

運算符 說明 舉例
= 檢測兩個字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 檢測兩個字符串是否相等不相等返回 true。 [ $a != $b ] 返回 true。
-z 檢測字符串長度是否爲0爲0返回 true。 [ -z $a ] 返回 false。
-n 檢測字符串長度是否爲0不爲0返回 true。 [ -n "$a" ] 返回 true。
$ 檢測字符串是否爲空不爲空返回 true [ $a ] 返回 true。

正則表達式元字符vim

  • 特殊的元字符

  • 擴展的正則表達式

 

Linux 教程

Linux 教程Linux 簡介Linux 安裝Linux 系統啓動過程Linux 系統目錄結構Linux 忘記密碼解決方法Linux 遠程登陸Linux 文件基本屬性Linux 文件與目錄管理Linux 用戶和用戶組管理Linux 磁盤管理Linux vi/vimlinux yum 命令

Shell 教程

Shell 教程Shell 變量Shell 傳遞參數Shell 數組Shell 運算符Shell echo命令Shell printf命令Shell test 命令Shell 流程控制Shell 函數Shell 輸入/輸出重定向Shell 文件包含

Linux 參考手冊

Linux 命令大全Nginx 安裝配置MySQL 安裝配置

 Shell echo命令

Shell test 命令 

Shell printf 命令

上一章節咱們學習了 Shell 的 echo 命令,本章節咱們來學習 Shell 的另外一個輸出命令 printf。

printf 命令模仿 C 程序庫(library)裏的 printf() 程序。

printf 由 POSIX 標準所定義,所以使用 printf 的腳本比使用 echo 移植性好。

printf 使用引用文本或空格分隔的參數,外面能夠在 printf 中使用格式化字符串,還能夠制定字符串的寬度、左右對齊方式等。默認 printf 不會像 echo 自動添加換行符,咱們能夠手動添加 \n。

printf 命令的語法:

printf  format-string  [arguments...]

參數說明:

  • format-string: 爲格式控制字符串
  • arguments: 爲參數列表。

實例以下:

$ echo "Hello, Shell"
Hello, Shell
$ printf "Hello, Shell\n"
Hello, Shell
$

接下來,我來用一個腳原本體現printf的強大功能:

#!/bin/bash
# author:菜鳥教程
# url:www.runoob.com
 
printf "%-10s %-8s %-4s\n" 姓名 性別 體重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
printf "%-10s %-8s %-4.2f\n" 楊過 男 48.6543 
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

執行腳本,輸出結果以下所示:

姓名     性別   體重kg
郭靖     男      66.12
楊過     男      48.65
郭芙     女      47.99

%s %c %d %f都是格式替代符

%-10s 指一個寬度爲10個字符(-表示左對齊,沒有則表示右對齊),任何字符都會被顯示在10個字符寬的字符內,若是不足則自動以空格填充,超過也會將內容所有顯示出來。

%-4.2f 指格式化爲小數,其中.2指保留2位小數。

 

更多實例:

#!/bin/bash
# author:菜鳥教程
# url:www.runoob.com
 
# format-string爲雙引號
printf "%d %s\n" 1 "abc"

# 單引號與雙引號效果同樣 
printf '%d %s\n' 1 "abc" 

# 沒有引號也能夠輸出
printf %s abcdef

# 格式只指定了一個參數,但多出的參數仍然會按照該格式輸出,format-string 被重用
printf %s abc def

printf "%s\n" abc def

printf "%s %s %s\n" a b c d e f g h i j

# 若是沒有 arguments,那麼 %s 用NULL代替,%d 用 0 代替
printf "%s and %d \n"

執行腳本,輸出結果以下所示:

1 abc
1 abc
abcdefabcdefabc
def
a b c
d e f
g h i
j  
 and 0

printf的轉義序列

序列 說明
\a 警告字符,一般爲ASCII的BEL字符
\b 後退
\c 抑制(不顯示)輸出結果中任何結尾的換行字符(只在%b格式指示符控制下的參數字符串中有效),並且,任何留在參數裏的字符、任何接下來的參數以及任何留在格式字符串中的字符,都被忽略
\f 換頁(formfeed)
\n 換行
\r 回車(Carriage return)
\t 水平製表符
\v 垂直製表符
\\ 一個字面上的反斜槓字符
\ddd 表示1到3位數八進制值的字符。僅在格式字符串中有效
\0ddd 表示1到3位的八進制值字符

 

 

3一、題目要求  :獲取網卡ip、 獲取網卡ip顯示顏色

提示用戶輸入網卡的 名字,而後咱們用腳本輸出網卡的ip,須要考慮下面問題:  

  1. 輸入的字符不符合網卡名字規範,怎麼應對。
  2. 名字符合規範,可是根本就沒有這個網卡又怎麼應對。

參考答案

#!/bin/bash
ip add |awk -F ': ' '$1 ~ "^[1-9]" {print $2}' > /tmp/eth.list
while :
do
    eths=`cat /tmp/eth.list |xargs`
    read -p "Please input a if name(The eths is `echo -e "\033[31m$eths\033[0m"`): " eth
    if [ -z "$eth" ]
    then
	echo "Please input a if name."
	continue
    fi
    if ! grep -qw "$eth" /tmp/eth.list
    then
	echo "The if name is error."
	continue
    else
	break
    fi
done

if_ip() 
{
    ip add show dev $1 |grep ' inet ' |awk '{print $2}'|awk -F '/' '{print $1}' >/tmp/$1.txt
    n=`wc -l /tmp/$1.txt|awk '{print $1}'`
    if [ $n -eq 0 ]
    then
	echo "There is no ip address on the eth."
    else
	echo "The ip addreess is:"
        for ip in `cat /tmp/$1.txt`
	do
	    echo -e "\033[33m$ip\033[0m"
	done
    fi
}

if_ip $eth

實例 : 

[root@localhost ~]# # ip add                                 #  查看機器上全部的網卡

[root@localhost ~]# # ip add |awk -F ': ' '$1 ~ "^[1-9]" {print $2}'                #查看全部的網卡列表

[root@localhost ~]# # ip add show dev ens33 | grep ' inet ' |awk '{print $2}'                                   #獲取ens33網卡的IP,並精準截取IP所在的第二行。/24表示是IP地址的netmask網段

輸入網卡的名字 ,運行腳本,查看結果,

若是輸入了。錯的網卡名字,會提示網卡名字錯誤。輸入正確的網卡名字,就直接顯示IP地址,而後退出。

未添加顏色,執行腳本以後,顯示的結果。

 

注意  : 

cat /tmp/eth.list |xargs                       #在腳本中表示列出全部的網卡的名字

[root@localhost ~]# echo "Please input a if name(The eths is 'cat /tmp/eth.list|xargs')"                              #查看網卡列表中的eth網卡

 

 if [ -z "$eth" ]                #表達的含義,是若是eth是空的,就提示用戶 :  Please input a if name.  

 if ! grep -qw "$eth" /tmp/eth.list            #表達的含義,是若是eth是不在/tmp/eth.list 文件中,就提示用戶 :  The if name is error.

 

if_ip                          #函數的名字

ip add show dev $1 |grep ' inet ' |awk '{print $2}'|awk -F '/' '{print $1}' >/tmp/$1.txt                       #顯示IP網卡的IP地址,並把輸出的結果存入/tmp/$1.txt臨時文件中  ,$1表示第一個參數。  

wc -l /tmp/$1.txt|awk '{print $1}                           #先統計/tmp/$1.txt臨時文件中的行數。

 

if [ $n -eq 0 ]         #若是eq等於0,那麼提示用戶 「There is no ip address on the eth.」

 

31.2 獲取網卡ip顯示顏色

案例

echo顯示帶顏色,須要使用參數-e

格式以下 : 

echo -e "\033"[字背景顏色;文字顏色m字符串\033[0m

例如 : 

echo -e"\033[41;37m TonyZhang \033[0m"

其中41的位置表明底色,37的位置是表明字的顏色

注 :

一、字背景顏色和文字顏色之間是英文的」""」

二、文字顏色後面有個m

三、字符串先後能夠沒有空格,若是有的話,輸出也是一樣有空格

例子 :

echo -e "/033[30m 黑色字 \033[0m"

echo -e "/033[31m 紅色字 \033[0m"

echo -e "/033[30m 綠色字 \033[0m"

echo -e "/033[30m 黃色字 \033[0m"

echo -e "/033[30m 藍色字 \033[0m"

echo -e "/033[30m 紫色字 \033[0m"

echo -e "/033[30m 藍色字 \033[0m"

echo -e "/033[30m 白色字 \033[0m"

echo -e "/033[30m 黑底白色字 \033[0m"

 

echo -e "/033[30m紅底 白字 \033[0m"

echo -e "/033[30m 綠底白字 \033[0m"

echo -e "/033[30m 黃底白字 \033[0m"

echo -e "/033[30m 藍底白字 \033[0m"

爲網卡的名稱顯示顏色。

#!/bin/bash
ip add |awk -F ': ' '$1 ~ "^[1-9]" {print $2}' > /tmp/eth.list
while :
do
    eths=`cat /tmp/eth.list |xargs`
    read -p "Please input a if name(The eths is '/tmp/eth.list|xargs'): " eth
    if [ -z "$eth" ]
    then
	echo "Please input a if name."
	continue
    fi
    if ! grep -qw "$eth" /tmp/eth.list
    then
	echo "The if name is error."
	continue
    else
	break
    fi
done

if_ip() 
{
    ip add show dev $1 |grep ' inet ' |awk '{print $2}'|awk -F '/' '{print $1}' >/tmp/$1.txt
    n=`wc -l /tmp/$1.txt|awk '{print $1}'`
    if [ $n -eq 0 ]
    then
	echo "There is no ip address on the eth."
    else
	echo "The ip addreess is:"
        `cat /tmp/$1.txt

    fi
}

if_ip $eth

添加顏色,執行腳本以後,顯示的結果。

 

3二、題目要求  : 列出目錄內容

寫一個腳本,實現以下功能:  

  1. 腳本能夠帶參數也能夠不帶
  2. 參數能夠有多個,每一個參數必須是一個目錄
  3. 腳本檢查參數個數,若等於0,則列出當前目錄自己,不然顯示每一個參數包含的子目錄。

【核心要點】

$#參數個數

test -d filename                     #

find $d -type d                      #把當前文件下的文件所有列出來

參考答案

#!/bin/bash
if [ $# -eq 0 ]
then
    echo "當前目錄下的文件是:"
    ls .
else
    for d in $@
    do
	if [ -d $d ]
	then
	    echo "目錄$d下有這些子目錄:"
	    find $d -type d 
	else
	    echo "並無該目錄:$d"
	fi
    done
fi

實例 : 

查看當前目錄下的文件

顯示tmp和/usr/local目錄下的文件

 

3三、題目要求   : 下載文件

定義一個shell函數,能接受兩個參數,知足如下要求:  

  1. 第一個參數爲URL,便可下載的文件,第二個參數爲目錄,即下載後保存的位置
  2. 若是用戶給的目錄不存在,則提示用戶是否建立,若是建立就繼續執行,不然,函數返回一個51的錯誤值給調用腳本
  3. 若是給的目錄存在,則下載文件,下載命令執行結束後測試文件下載成功與否,若是成功,則返回0給調用腳本,不然,返回52給調用腳本

參考答案

#!/bin/bash
if [ $# -ne 2 ]
then
   echo "你必需要輸入兩個參數,第一個參數是網址,第二個參數是目錄." 
   exit 1
fi

if [ ! -d $2 ]
then
    while :
    do
    echo "你輸入的第二個參數,並非一個存在的目錄。是否要建立該目錄呢?(y|n): "c
    case $c in 
	y|Y)
	    mkdir -p $2
	    ;;
	n|N)
	    exit 51
	    ;;
	*)
	    echo "請輸入y或者n."
	    continue
	    ;;
    esac
    done
else
    cd $2
    wget $1 
    if [ $? -eq 0 ]
    then
	exit 0
    else
	echo "下載失敗."
	exit 52
    fi
fi

實例 : 

運行腳本,獲得結果是1,說明腳本沒問題。返回52給調用腳本,給的目錄不存在,則下載文件失敗,

腳本解析失敗,緣由後面沒有兩個參數,

輸入兩個參數,第一個參數是網址,第二個參數是目錄時,就解析成功了。

查看下載的文件

 

注意  : 

if [ $# -ne 2 ]                       #若是參數不等於2,提示 : 你必需要輸入兩個參數,第一個參數是網址,第二個參數是目錄.

if [ ! -d $2 ]                            #若是$2是一個不存在的目錄,提示 :你輸入的第二個參數,並非一個存在的目錄。是否要建立該目錄呢?(y|n): 

 

 mkdir -p $2                           #若是客戶輸入了y或者Y,建立這個目錄。若是輸入N|n,直接退出。

 

    cd $2
    wget $1                       #表示若是沒有,就cd切換到$2,而後wegt下載

 

if [ $? -eq 0 ]                 #若是$?等於0,表示下載成功就退出,不然就是下載失敗。

 

報錯緣由 : 未安裝命令。解決辦法  : yum install -y wget

 

3四、題目要求  :  猜數字

寫一個shell腳本,能實現以下需求:  

  1. 執行腳本後,提示輸入名字(英文的,能夠是大小寫字母、數字不能有其餘特殊符號),而後輸出一個隨機的0-99之間的數字,腳本並不會退出,繼續提示讓輸入名字
  2. 若是輸入相同的名字,輸出的數字仍是第一次輸入該名字時輸出的結果
  3. 前面已經輸出過的數字,下次不能再出現
  4. 當輸入q或者Q時,腳本會退出。

參考答案

#!/bin/bash
n=$[$RANDOM%101]
while :
do
    read -p "請輸入一個0-100的數字:" n1
    if [ -z "$n1" ]
    then
	echo "必需要輸入一個數字。"
	continue
    fi
    n2=`echo $n1 |sed 's/[0-9]//g'`
    if [ -n "$n2" ]
    then
	echo "你輸入的數字並非正整數."
	continue
    else
	if [ $n -gt $n1 ]
	then
	    echo "你輸入的數字小了,請重試。"
	    continue
	elif [ $n -lt $n1 ]
	then
	    echo "你輸入的數字大了,請重試。"
	    continue
	else
	    echo "恭喜你,猜對了!"
	    break
	fi
    fi
done

實例 : 

獲取一個隨機的數字

獲取一個100之內的隨機數字

運行0-99的腳本,輸入一個正確的隨機數字,就結束了。

 

 

35.一、題目要求   :   根據名字得數字

寫一個shell腳本,能實現以下需求:  

  1. 執行腳本後,提示輸入名字(英文的,能夠是大小寫字母、數字不能有其餘特殊符號),而後輸出一個隨機的0-99之間的數字,腳本並不會退出,繼續提示讓輸入名字
  2. 若是輸入相同的名字,輸出的數字仍是第一次輸入該名字時輸出的結果
  3. 前面已經輸出過的數字,下次不能再出現
  4. 當輸入q或者Q時,腳本會退出。

參考答案

#!/bin/bash
f=/tmp/user_number.txt
while :
do
    read -p "Please input a username: " u
    u1='echo $u|sed 's/[a-zA-Z0-9]//g''	
    if [ -n "$u1" ]
    then
	echo "你輸入的用戶名不符合規範,正確的用戶名應該是大小寫字母和數字的組合"
	continue
    else
	if [ -f $f ]
	then
	    u_n=`awk -v uu=$u '$1==uu {print $2}' $f`
	    if [ -n "$u_n"  ]
	    then
		     echo "用戶$u對應的數字是:$u_n"
	    else
		    n=$[$RAMDOM%100]
	        echo "用戶$u對應的數字是 : $n"
            echo $u $n >> $f
	    fi
	else
	    n=$[$RAMDOM%100]
	    echo "用戶$u對應的數字是:$n"
	    echo $u $n >> $f
	fi
    fi
done

實例 : 

查看運行的結果,/tmp/user_number.txt文件沒有建立。

當第二次執行腳本時,/tmp/user_number.txt就建立了。輸入q或者大寫的    Q,退出 運行的腳本。不建議使用ctrl +c.

 

注意  : 

u_n                               #u_n的值爲1

if [ -n "$u_n" ]                    #若是u_n不爲空,那麼$u對應的變量就是$u_n ;不然,從新創造一個隨機數。

 

`echo $u|sed 's/[a-zA-Z0-9]//g'`                  #若是輸入u的值,是空的,說明用戶輸入的名字是對的

-n "$u1"                 #若是輸入的不爲空,。提示 「你輸入的用戶名不符合規範,正確的用戶名應該是大小寫字母和數字的組合」

"$u $n" >>$f                          #將用戶名和對應的數字,記錄到/tmp/user_number.txt文件中

 

awk '{print $2}' $f|grep -qw $n                #查找/tmp/user_number.txt文件中第二段截取出來,

u_n=`awk -v uu=$u '$1==uu {print $2}' $f`                      #求用戶名中的行數,並截取/tmp/user_number.txt文件中第二段

 

35.2 根據名字得數字優化

參考答案

#!/bin/bash
f=/tmp/user_number.txt
j_n()
{
    while :
    do
	n=$[RANDOM%100]
	if awk '{print $2}' $f|grep -qw $n
	then
	    continue
	else
	    break
	fi
    done
}

while :
do
    read -p "Please input a username: " u
    if [ -z "$u" ]
    then
	echo "請輸入用戶名."
	continue
    fi

    if [ $u == "q" ] || [ $u == "Q" ]
    then
	exit
    fi 

    u1=`echo $u|sed 's/[a-zA-Z0-9]//g'`
    if [ -n "$u1" ]
    then
	echo "你輸入的用戶名不符合規範,正確的用戶名應該是大小寫字母和數字的組合"
	continue
    else
	if [ -f $f ]
	then
	    u_n=`awk -v uu=$u '$1==uu {print $2}' $f`
	    if [ -n "$u_n" ]
	    then
		echo "用戶$u對應的數字是:$u_n"
	    else
		j_n
		echo "用戶$u對應的數字是:$n"
	        echo "$u $n" >>$f
	    fi
	else
	    j_n
	    echo "用戶$u對應的數字是:$n"
	    echo $u $n >> $f
	fi
    fi
done

注意  : 

if awk '{print $2}' $f|grep -qw $n                  #表示查看/tmp/user_number.txt文件第二端,是否已經出現了$n隨機數?

 

3六、題目要求  :  一個數字的行

系統logrotate工具,能夠完成日誌切割、歸檔。寫一個shell腳本實現相似的歸檔功能。   舉例: 假如服務的輸出日誌是1.log,要求天天歸檔一個,1.log次日就變成1.log.1,第三天1.log.2, 第四天 1.log.3  一直到1.log.5。

參考答案

#!/bin/bash
cd /data/logs
log=1.log
mv_log()
{
    [ -f $1 ] && mv $1 $2
}
[ -f 1.log.5 ] && rm -f 1.log.5
for i in `seq 4 -1 1`
do 
    j=$[$i+1]
    mv_log $log.$i $log.$j
done
mv 1.log 1.log.1

實例 : 

統計行中出現的數字

 

注意  : 

echo $line |sed 's/[^0-9]//g' |wc -L                    #統計全部的行,將全部的非數字所有刪除,只剩下數字,並計算數字的個數。

 

3七、題目要求   :    日誌切割歸檔

系統logrotate工具,能夠完成日誌切割、歸檔。寫一個shell腳本實現相似的歸檔功能。   舉例: 假如服務的輸出日誌是1.log,要求天天歸檔一個,1.log次日就變成1.log.1,第三天1.log.2, 第四天 1.log.3  一直到1.log.5。

參考答案

#!/bin/bash
cd /data/logs
log=1.log
mv_log()
{
    [ -f $1 ] && mv $1 $2
}
[ -f 1.log.5 ] && rm -f 1.log.5
for i in `seq 4 -1 1`
do 
    j=$[$i+1]
    mv_log $log.$i $log.$j
done
mv 1.log 1.log.1

實例 : 

建立/data/logs目錄 , 而後在1.log裏面寫入111

往2.log日誌裏面寫入222,按照順序,依次在日誌裏面寫入對應的數字,如:3.log裏面寫333.

查看腳本是否有問題,在1.log日誌文件中寫入000.而後執行 「cat *」命令,查看運行結果。應該系統日誌只有兩個,因此顯示的結果到222,就結束了。

 

注意  : 

log=1.log                                     #log是定義的變量

mv_log()                                     #定義的函數

[ -f $1 ] && mv $1 $2                            #若是$1存在,就把$1改爲$2

[ -f 1.log.5 ] && rm -f 1.log.5                 #若是1.log.5存在,就刪除1.log.5

 

3八、題目要求   :  查找在線IP

寫一個shell腳本,把192.168.0.0/24網段在線的ip列出來。

參考答案

#!/bin/bash
for i in `seq 1 254`
do 
    if ping -c 2 -W 2 192.168.0.$i >/dev/null 2>/dev/null
    then
	echo "192.168.0.$i 是通的."
    else
	echo "192.168.0.$i 不通."
    fi
done

實例 : 

有兩個IP地址,測試一個通的,返回ok,一個不通的,什麼都不返回。

執行腳本,查看腳本運行的結果。由於這個網段,不通,因此所有都不通

 

注意  : 

for i in `seq 1 254`                                   #ping的IP地址範圍1-254

if ping -c 2 -W 2 192.168.0.$i >/dev/null 2>/dev/null                  #把能ping通的IP地址寫入到/dev/nul,錯誤的也寫入/dev/null  。-c 2表示ping兩次,-W 2  表示ping的時間爲兩秒

 

 

3九、題目要求   :  檢查腳本錯誤

寫一個shell腳本,檢查指定的shell腳本是否有語法錯誤,如有錯誤,首先顯示錯誤信息,而後提示用戶輸入q或者Q退出腳本,輸入其餘內容則直接用vim打開該shell腳本。

參考答案

#!/bin/bash
sh -n $1 2>/tmp/sh.err
if [ $? -ne 0 ]
then
    cat /tmp/sh.err
    read -p "請輸入q/Q退出腳本。" c
    if [ -z "$c"]
    then
	vim $1
        exit 0
    fi
    if [ $c == q ] || [ $c == Q ]
    then
	exit 0
    else
	vim $1
	exit 0
    fi
else
    echo "腳本$1沒有語法錯誤."
fi

實例 : 

腳本運行結果。

注意  : 

sh -n $1 2>/tmp/sh.err                    #將錯誤的輸出到/tmp/sh.err  

if [ $? -ne 0 ]                              #$?不等於0,說明有語法錯誤。

 

40、題目要求   :  格式化數字

輸入一串隨機數字,而後按千分位輸出。   好比輸入數字串爲「123456789」,輸出爲123,456,789。

參考答案

#!/bin/bash
n=`echo $1|wc -L`
for d in `echo $1|sed 's/./& /g'`
do
    n2=$[$n%3]
    if [ $n2 -eq 0 ]
    then
	echo -n ",$d"
    else
	echo -n "$d"
    fi
    n=$[$n-1]
done |sed 's/^,//'
echo

實例 : 

sed實現數字之間的自動空一格

腳本正確執行的結果

 

注意  : 

n=`echo $1|wc -L`                       #n表示計算數字的長度,$1是數字串。

for d in `echo $1|sed 's/./& /g'`                          #sed實現數字的自動空一格,&表明前面的點。

    n2=$[$n%3]                                    #$[$n%3] 表示$n除以3,而後添加逗號間隔。
    if [ $n2 -eq 0 ]                                 #0表示$n2可以被3整除

 

    echo -n ",$d"                            #能被3整除的,添加逗號間隔。

  echo -n "$d"                           #不能被3整除的,不添加逗號間隔。

 

來源 :https://github.com/aminglinux/shell100/blob/master/13.md

相關文章
相關標籤/搜索