这里使用的是Bash
概要语法
#!/bin/bash
# 变量定义
temp="hello-world"
# 使用变量 -- 只能在双引号中嵌入变量
echo "hello -${temp}- world"
# 截取字符串
echo ${temp:0:2}
#字符串长度
echo ${#temp}
# 数组
arr=(1, 12, "a")
echo ${arr[0]}, ${arr[@]}, ${#arr[@]}
# 参数
echo "参数的个数: $#"
echo "所有参数: $@"
echo "第一个参数: $1"
echo "当前程序运行进程: $$"
echo "后台退出时的状态: $?"
# 运算符
# 算数符
# 原生的bash不支持算数,使用expr来实现
# 使用``包裹
# 表达式和运算符之间要有空格
val=`expr 1 + 2`
val_1=`expr ${val} % 2`
echo "1 + 2 = ${val}", ${val_1}
echo "1 * 2 = `expr 1 \* 2`"
echo "1 / 2 = `expr 1 / 2`"
if [ ${val} == ${val_1} ]
then
echo "a 等于 b"
fi
if [ ${val} != ${val_1} ]
then
echo "a 不等于 b"
fi
# 关系运算符
# -eq -ne -gt -lt -ge -le
if [ $val -eq $val_1 ]
then
echo "a eq b"
fi
a=10
b=20
# 布尔运算符
# !(非) -o(或) -a(与)
if [ $a -lt 11 -a $b -gt 11 ]
then
echo "$a -lt 11 -a $b -gt 11"
fi
# 逻辑运算符
# && ||
if [[ $a -lt 11 && $b -gt 11 ]]
then
echo "$a -lt 11 -a $b -gt 11"
fi
filepath="/Users/air_cc/workspace/wechat/fabric-deploy"
if [ -d $filepath ]
then
echo "file is directory"
fi
# echo的用法
# read name # 读取标准输入的第一行
# echo "get name: ${name}"
echo -e "hello\n" # 转意输出
echo "hello"
echo `date`
echo `ls`
# printf格式化输出
printf "%s-%c-%-4d-%.2f \n" hello w 12 12.234
printf "jack \a"
# 流程控制
a=$1
if [ $a -eq 10 ]
then
echo 'a == 10'
elif [[ $a -lt 20 ]]; then
echo '$a lt 20'
else
echo 'other'
fi
for (( i = 0; i < 10; i++ )); do
echo "i = $i"
done
for i in 12, 'aaa', false; do
echo "i = ${i}"
done
a=10
while [[ a -gt 1 ]]; do
echo "while a == $a"
let "a--"
done
until [[ a -gt 10 ]]; do
if [ $a -ne 3 ]; then
echo "until a == $a"
else
echo "util a is ${a}"
fi
let "a++"
if [ $a -eq 8 ];then
echo "breaked"
break;
fi
done
# read word
case $word in
1) echo 'select 1'
;;
2) echo 'select 2'
;;
*) echo 'select other'
;;
esac
# 函数
finWithParam() {
printf "$0 参数: $1 - ${12} - \n $@ \n - $# \n"
}
finWithParam 1 2 3 4 5 6 7 8 9 10 11 12 13
# 使用外部sh脚本
filepath='./tempfile'
if [ -f $filepath ]; then
echo `file ./tempfile`
fi
source ./tempfile # 或者 . ./tempfile
echo "-h-"
echo "get url: ${url}"
小技巧
- 当前执行shell文件的位置
echo "相对位置: `dirname $0`"
echo "绝对位置: `cd \`dirname $0\` && pwd`"
参考
网友评论