天天看點

Bash程式設計(五)

一、bash判斷字元類型

二、bash腳本程式設計文法

三、shell的99乘法表

一、bash判斷字元類型  //輸入一個字元串,判斷其類型

方法一、printf實作

Printf實作方法

格式替換符:

     %b 相對應的參數被視為含有要被處理的轉義序列之字元串。 

     %c ASCII字元。顯示相對應參數的第一個字元 

     %d, %i 十進制整數 //如果目标變量不是整數,printf将會報錯

     %e, %E, %f 浮點格式  //a=1.2.3  && echo "$E" "$a"  不會報錯。建議不要使用

     %g %e或%f轉換,看哪一個較短,則删除結尾的零 

     %G %E或%f轉換,看哪一個較短,則删除結尾的零 

     %o 不帶正負号的八進制值 

     %s 字元串 

     %u 不帶正負号的十進制值 

     %x 不帶正負号的十六進制值,使用a至f表示10至15 %X 不帶正負号的十六進制值,使用A至F表示10至15 

     %% 字面意義的% 轉義序列

轉義序列

    \a 警告字元,通常為ASCII的BEL字元 

    \b 後退 

    \c 抑制(不顯示)輸出結果中任何結尾的換行字元(隻在%b格式訓示符控制下的參數字元串中有效),而且,任何留在參數裡的字元、任何接下來的參數以及任何留在格式字元串中的字元,都被忽略 

    \f 換頁(formfeed) 

    \n 換行 

    \r 回車(Carriage return)

    \t 水準制表符 

    \v 垂直制表符 

    \\ 一個字面上的反斜杠字元 

    \ddd 表示1到3位數八進制值的字元,僅在格式字元串中有效 

    \0ddd 表示1到3位的八進制值字元

#!/bin/bash  

function check(){  

    local a="$1"  

    printf "%d" "$a" &>/dev/null && echo "integer" && return  

    printf "%d" "$(echo $a|sed 's/^[+-]\?0\+//')" &>/dev/null && echo "integer" && return  

    printf "%f" "$a" &>/dev/null && echo "number" && return  

    [ ${#a} -eq 1 ] && echo "char" && return  

    echo "string"  

}  

方法二、awk實作

awk '{print($0~/^[-]?([0-9])+[.]?([0-9])+$/)?"num":"str"}' <<< "323"

判斷一個var是否是int的方法:

    expr $var + 0 &>/dev/null  //能夠實作加法運算則為int

    echo $args | sed 's/[0-9]//g'  //删除數字,看目标值是否為空

    echo $args | sed 's/[0-9]//g' | sed 's/-//g'  //排除+ / -

    #echo $a | grep "^[[:digit:]]\+" 

#if [ $a == 1 ]; then echo ok; fi

#if [ $a == 1 ]; then echo ok; else echo "false" ;fi    //then帶一個語句,else帶一個語句。後面都要帶;

順序執行

選擇執行:if,case

循環執行:while,until,for

    for循環:

        for VAR in LIST ; do 

            循環體

        done

        for ((;;)) ;do

    while循環

        while CONDITION;do    

            條件修正

        while read VAR;do

        done 《《   /path/to/file

    while:

        進入條件:CONDATION測試為真,

        提出條件:CONDATION測試為假

    until    //wile 前加上! 就是while的效果

        until CONDITON ;do

            循環控制變量修正表達式

        進入條件:CONDITION測試為假

        退出條件:CONDITION測試為真

注意:    

    a=1;b=2

    echo "${a}*${b}=$[$a*$b]"

    echo "$a*$b=$[$a*$b]"  //這兩個結果一樣,隻是,帶上{} 主要是為了區分開來

#!/bin/bash

declare -i i=1

declare -i j=1

##############for###############

for ((i=1;i<=9;i++));do

    for ((j=i;j<10;j++));do

        echo -n -e "$i*$j=$[$i*$j]\t"

    done

    echo

done

for ((i=1;i<=9;i++)) ;do

    for ((j=1;j<=i;j++));do

##############while###############

i=1

j=1

while [ $i -lt 10 ] ;do

    j=1

    while [ $j -le $i ] ;do

        echo -e -n "$i*$j=$[$i*$j]\t"

        let j++

    let i++

j=9

while  [ $i -lt 10 ] ;do

    j=$i    

    while [ $j -le 9 ]; do

    done    

done     

##############until###############

until [ $i -gt 9 ] ;do

    j=$i

    until [ $j -gt 9 ] ;do

        let  j++

done 

    until [ $j -gt $i ];do

        echo -e -n "$i*$j=$[$i*$j]\t" 

    let j++

    echo 

本文轉自MT_IT51CTO部落格,原文連結:http://blog.51cto.com/hmtk520/1977724,如需轉載請自行聯系原作者