shell简单语法
条件测试
用命令test或[ 测试一个条件是否成立。如果测试条件为真,命令的Exit Status为0,测试条件为假,Exit Status为1。
这里输入的数字比10大,条件成立为0,比10小条件不成立为1.
整数比较
-lt//小于
-le//小于等于
-gt//大于
-ge//大于等于
-eq//等于
-ne//不等于
测试命令
与 或 非 的测试命令
分支语句if/then/elif/else/fi
#!/bin/bash
read val
if [ $val -eq 100 ]
then
echo "true"
else
echo "false"
fi
if可以添加对任何命令的检测,它是根据命令的退出码判断
if支持嵌套
if不能出现空的代码块
case…esac
可以检测所有语句包括正则表达式
#!/bin/bash
read op
case $op in
start )
echo "start"
;;
stop )
echo "stop"
;;
restart )
echo "restart"
;;
* )
echo "default"
esac
循环语句
for/do/done
#!/bin/bash
for i in {1..10}
do
echo $i
done
#!/bin/bash
for(( i=1; i<10; i++))//当成c语言的语法来处理
do
echo $i
done
while/do/done
#!/bin/bash
i=0
while [ $i -le 10 ]
do
echo $i
let i++
done
位置参数和特殊变量
$0//相当于c语言main函数的argv[0]
$1,$2,$3... //位置参数,相当于c语言main函数的argv[1],argv[2]...
$#//相当于main函数的argc-1
$@//表示参数列表“$1”"$2"...
$?//上一条命令的Exit Status
$$//当前shell的进程号
函数
#!/bin/bash
function fun()
{
return $1
}
fun "$@"//传参
ret=$?//接受上一条命令的退出码
if [ $ret -eq 0 ]
then
echo "success"
else
echo "false"
fi
数组
arr=(1 2 3 "e" 5.34)//用空格隔开
echo ${arr[3]}//输出下标为3的
echo ${arr[@]}//将数组整体输出
echo ${arr[*]}//将数组个数作为变量输出
进度条实现
#!/bin/bash
i=0
bar=''
index=0
arr=( "|" "/" "-" "\\" )
while [ $i -le 100 ]
do
let index=index%4
printf "[%-100s][%d%%][\e[43;46;1m%c\e[0m]\r" "$bar" "$i" "${arr[$index]}"
let i++
let index++
usleep 30000
bar+='#'
done
printf "\n"