一、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,如需轉載請自行聯系原作者