1. 程式人生 > >Bash編程(五)

Bash編程(五)

bash編程;99乘法表;

一、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

本文出自 “黑馬騰空” 博客,請務必保留此出處http://hmtk520.blog.51cto.com/12595610/1977724

Bash編程(五)