天天看点

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,如需转载请自行联系原作者