
shell对变量取值要在变量前加$
shell代码中,不能随便使用空格,shell会作为命令行进行执行,有空格的话,会把命令行解析为选项、参数的形式
bash hello.sh
./hello,sh权限不够时,要添加执行的权限
condition.sh
#!/bin/bash
SYSTEM=`uname -s` #命令置换符,把执行结果传给SYSTEM
if [ $SYSTEM=="Linux" ] ;then #中括号两边都要有空格
echo "Linux"
elif [ $SYSTEM=="Windows" ];then
echo "Windows"
else
echo "Unkown System"
fi
运行结果:
1.数值比较:gt(大于)、lt(小于)、eq(等于)、le(小于等于)、ge(大于等于)
2.字符串比较
str1 = str2:当两个串有相同内容时为真
str1 != str2:当串str1和str2不等时为真
-n str1:当串钓长度大于0时为真(串非空)
-z str1:当串的长度为0时为真(空串)
str1:当串str1为非空时为真
3.文件判断
-r file:用户可读为真
-w file:用户可写为真
-x file:用户可执行为真
-f file:文件为正规文件为真
-d file:文件为目录为真
-c file:文件为字符设备文件为真
-b file:文件为块设备文件为真
-s file:文件大小非O时为真
4.逻辑判断
-a :与
-o :或
!:非
case expression in
pattern1)
statement1
;;
pattern2)
statement2
;;
pattern3)
statement3
;;
……
*)
statementn
esac
shell 循环
for i in seq 1 10; do #循环的列表 xx done
while [ condition ] ;do #中括号要有空格 done参数解析
$#:参数个数
$*:参数列表
$1:第一个参数
解析命令行的例子:
#test.sh
#!/bin/bash
while [ -n "$1" ]
do
case "$1" in
-a|--account)
echo "param a"
a="$2"
echo $a
shift 2
;;
-s|--server)
echo "param s"
s="$2"
echo $s
shift 2
;;
-h|--help)
usage
return 0
;;
--)
shift
break
;;
*)
return 1
;;
esac
done
shell调试
set -x 与set +x:打开和关闭调试,显示这两段语句之间的变量结果
sh -x xxx.sh :运行的所有变量都显示
:<用source 让ini格式的文件shell脚本中生效 这样可以直接使用ini配置文件的变量,对变量进行更改