记录基础语法格式以及举例
#!/bin/bash
声明script使用bash名称
$((计算式))
可以用这种格式进行计算式
script执行方式的区别
1直接执行:在子进程执行,变量等执行完毕即结束
2通过source执行:在父进程中执行,定义的变量依然可用
&& 与 ||
cmd1 && cmd2 cmd1返回结果为真,cmd2才执行
cmd1 || cmd2 cmd1返回结果为假,cmd2才执行
判断符号[]
[口”$HOME”口==口”/root"口]
口代表空格,注意四个空格位置,必须严格遵守语法
注意内部的变量和常亮都需要用””引起来,因为被替换之后可能有问题
script的默认变量
$0:执行脚本的文件名
$#:全部参数个数
$@:全部参数,空格分开
$1,$2…:第一个参数/第二个参数
条件判断式if…then
if [条件判断式]; then
执行语句
elif [条件判断式]; then
执行语句
else
执行语句
fi
case条件判断
case $变量名称 in
“case1” )
执行语句
;;
“case2” )
执行语句
;;
*)
兜底执行
;;
esac
函数function
函数内的参数是通过1,2来取得,也就是函数内是取不到脚本的参数的
function fname(){
echo “first param is $1"
}
while和until 条件循环
while [条件]
do
执行语句
done
满足条件就循环
until [条件]
do
执行语句
done
不满足条件就循环
for循环
for..in循环
for var in $(seq 1 10)
do
执行语句
done
for…do…done数值处理
for ((i=0;i<10;i++)
do
执行语句
done
追踪与调试
sh [-nvx] scripts.sh
-n:不执行,仅检查语法问题
-v:执行前将内容输出到屏幕
-x:将使用到的script内容输出到屏幕,调试时这是很有价值的信息
举例:sh -n scripts.sh(检查语法通过则无任何内容输出), sh -x scripts.sh(将使用的每一步scripts内容输出到屏幕,这是很有价值的信息哦)
条件测试附录(常用的参数有:-e(文件存在),-f(存在且为文件),-d(存在且为目录),-a(等价&&),-o(等价||),!(等价非))
条件测试附录1 条件测试附录2 条件测试附录3简单的demo附录
if
yn="$1"
if [ "$yn" == "y" ] || [ "$yn" == "Y" ]; then
echo 'OK continue.'
exit 0
elif [ "$yn" == "n" ] || [ "$yn" == "N" ]; then
echo 'oh interrupt'
exit 0
else
echo "I don't know what you fuck say"
fi
参数
#!/bin/bash
echo -e 'script name $0:'$0
echo -e 'total script parameter $#:'$#
[ "$#" -lt 2 ] && echo 'total less than 2' && exit 0
echo 'whole parameter $@:'$@
echo 'first parameter $1:'$1
echo 'second parameter $2:'$2
case
case $1 in
"hi" )
echo "fucking hi?"
;;
"" )
echo "must input fucking what!"
;;
* )
echo "what you fucking say : $1"
;;
esac
while,until
# -a == && , -o == ||
while [ "$yn" != "yes" -a "$yn" != "YES" ]
do
read -p 'please input yes to exit while training:' yn
done
echo "OK exit while training..."
until [ "$yna" == "yes" ] || [ "$yna" == "YES" ]
do
read -p 'please input yes to exit until training:' yna
done
echo "OK exit until training..."
for
user=$(cut -d ":" -f 1 /etc/passwd)
for var in $user
do
echo "name:$var"
done
for var in $(seq 1 10)
do
echo "seq:$var"
done
s=0
for ((i=0;i<5;i++))
do
s=$(($s+$i))
done
echo "s:$s"
网友评论