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带一个语句。后面都要带;
    
    
    
二、bash脚本编程语法
顺序执行
选择执行:if,case
循环执行:while,until,for

    for循环:
        for VAR in LIST ; do 
            循环体
        done
        for ((;;)) ;do
            循环体
        done
            
    while循环
        while CONDITION;do    
            循环体
            条件修正
        done
        while read VAR;do
            循环体
        done 《《   /path/to/file
    
    while:
        进入条件:CONDATION测试为真,
        提出条件:CONDATION测试为假
    until    //wile 前加上! 就是while的效果
        until CONDITON ;do
            循环体
            循环控制变量修正表达式
        done
        进入条件:CONDITION测试为假
        退出条件:CONDITION测试为真
    
注意:    
    a=1;b=2
    echo "${a}*${b}=$[$a*$b]"
    echo "$a*$b=$[$a*$b]"  //这两个结果一样,只是,带上{} 主要是为了区分开来
    
三、shell的99乘法表
#!/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
        echo -n -e "$i*$j=$[$i*$j]\t"
    done
    echo
done
##############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++
    done
    let i++
    echo
done
i=1
j=9
while  [ $i -lt 10 ] ;do
    j=$i    
    while [ $j -le 9 ]; do
        echo -e -n "$i*$j=$[$i*$j]\t"
        let j++
    done    
    let i++
    echo
done     
##############until###############
i=1
j=1
until [ $i -gt 9 ] ;do
    j=$i
    until [ $j -gt 9 ] ;do
        echo -e -n "$i*$j=$[$i*$j]\t"
        let  j++
    done
    let i++
    echo
done 

i=1
until [ $i -gt 9 ] ;do
    j=1
    until [ $j -gt $i ];do
        echo -e -n "$i*$j=$[$i*$j]\t" 
    let j++
    done
    echo 
    let i++

done 










本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/1977724,如需转载请自行联系原作者

上一篇:Linux基础命令小结(上)-Linux学习日记


下一篇:leetcode5962. 连接两字母单词得到的最长回文串(mid)(69双周赛)