标准输入:控制台输入内容到变量name
#!/bin/bash
read name
echo $name
if 条件判断:
如果$1 字符串长度为0即为空,则date=`date '+%Y%m%d'`,否则为date=$1
if [ -z $1 ]
then
date=`date '+%Y%m%d'`
else
date=$1
fi
如果文件存在且大小不为0为真
if [ -s 文件名 ]
如果文件存在
if [ -e 文件名 ]
如果两个字符串相同则为真
if [string1 =string2 ] 或者 if [ string1 == string2 ]
不相等
if [string1 != string2 ]
if 条件判断
then
elif 条件判断
then
else
fi
while 循环:
i=0
while(($i<=10))
do
#循环体
#自增
let "i++"
done
while使用注意事项:
利用管道在while循环内部对变量赋值,在循环外面会失效
#!/bin/bash
i=0
cat 1.dat | while read line
do
array[i]=$line
let i++
done
echo "${array[*]}"
此时array数组内容为空,可以换种写法
#!/bin/bash
i=0
while read line
do
array[i]=$line
let i++
done < 1.dat
echo "${array[*]}"
此时array数组内容就不为空了
for循环
for (( i=1;i<=row_count;i++ ));
do
echo "${i}"
done
case ... esac 多选择语句
num可以是数字也可以是字符串
echo 输入1到4之间的数字
read num
case $num in
1) echo "你输入了1"
;;
2) echo "你输入了2"
;;
3) echo "你输入了3"
;;
*) echo "你没有输入1到3之间的整数"
;;
esac
布尔运算符
-a 与 同真为真,有假为假 [!false] true
-o 或 有真为真,全假为假 [ $a -lt 20 -o $b -gt 100 ] true
非 真为假,假为真 [ $a -lt 20 -a $b -gt 100 ] false
逻辑运算符
&& 逻辑的and [[ $a -lt 100 && $b -gt 100 ]] false
|| 逻辑的or [[ $a -lt 100 || $b -gt 100 ]] true
表达式:
表达式和运算符之间要用空格隔开
i=0
j=1
相加
j=`expr $i + 1`
相乘
j=`expr $i \* 1`
相除
j=`expr $i / 1`
数组:
hourarray=("00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "10")
hourarray[0]="00"
hourarray[1]="01"
获取数组所有元素
echo "${hourarray[*]}" 或者 echo "${hourarray[@]}"
获取数组的长度
echo "${#hourarray[*]}" 或者 echo "${#hourarray[@]}"
遍历输出从mysql中查询出来的数据
mysql -u${user} -p${pwd} -h{ip} database -Ne 'select * from t1' | while read nums
do
echo "${nums}"
done
循环遍历文件夹下的文件名
for file in `ls`;
do
done
用户自定义函数
如果没有return 将以函数最后一条命令运行结果作为返回值
return 的返回值在调用函数后通过$?获取
functionA(){
echo "两数求和:"
read anum
read bnum
echo "两个数字分别是$anum和$bnum"
return $(($anum+$bnum))
}
调用:
functionA
echo "两个数字之和为$? !"
可以为函数指定参数
functionA 1 2 3 4 5 6 7 8 9 34 73
注意在函数内使用参数如果参数个数>=10 则需要使用${10} 和${11} 要加上花括号
使用$10 取不到第10个参数的值,参数个数<10 可以使用 $1 不用加花括号
$# 参数总个数
$* 以一个字符显示所有参数
$@ 与$*相同,不同的是$@以多个字符显示每个参数