Bash编程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
本文出自 “黑马腾空” 博客,请务必保留此出处http://hmtk520.blog.51cto.com/12595610/1977724
以上是关于Bash编程的主要内容,如果未能解决你的问题,请参考以下文章