第一行通常指定脚本用什么解析器来执行
#!/bin/bash 或者 #!/bin/sh
chmod -x ./test.sh #使脚本具有可执行权限
运行方式
1. 直接运行
./test.sh
2. 文件名作为解释器参数
/bin/bash test.sh
test.sh和./test.sh运行的区别:
test.sh的话 系统会去PATH目录里去找这个命令,肯定是找不到的
./test.sh 告诉系统 就在当前目录找test.sh
注释
#
变量
定义变量
youname="simon"
变量名和等号之间不能有空格
使用变量
$youname
删除变量
unset youname
只读变量
readonly youname
字符串
单双引号的使用规则 类似PHP
双引号中可以使用{}将变量与字符串区分开来
echo "hello ${youname}hahaha"
拼接字符串
youname="simon"
echo "hello"$youname"!"
echo "hello " $youname "!"
echo "hello ${youname}!"
字符串长度
youname="simon"
echo ${#youname} 输出5
截取字符串
youname="simon"
echo ${youname:1:4} 输出imon 下标从0开始
查找字符串
youname="simon"
echo `expr index "$youname" i` 输出2 下标从1开始
判断字符串是否包含另一字符串
str='hello world'
word='world'
if [[ $str == *$word* ]]
then
#包含
else
#不包含
fi
数组
下标从0开始
元素用空格隔开
arrayname=(v1 v2 v3)
arrayname[0]=v1
读取
${arrayname[0]}
读取所有元素
${arrayname[@]}
获取元素个数
${#arrayname[@]}
传递参数
./test.sh a b c
echo $0 输出当前文件名
echo $1 输出a
echo $2 输出b
echo $3 输出c
echo $# 输出当前传递的参数个数
接收用户输入
使用read命令接收输入
echo -n "who are you ?"
read name
echo $name;
基本运算
bash不支持数学运算,需要借助awk及expr命令实现
echo `expr 2 + 2`
条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
逻辑判断
---------- if ----------
if [ $a == $b ]
then
#todo
fi
---------- if else ----------
if [ $a -gt 0]
then
echo '$a > 0'
else
echo '$a < 0'
fi
---------- if elseif ----------
if [ $a -gt 0 ]
then
echo '$a > 0'
elif
then
#todo
else
#todo
fi
是否是文件夹
if [ -d $file ]
是否是文件
if [ -f $file ]
检测字符串长度是否为0
if [ -z $str ]
检测字符串长度是否不为0
if [ -n $str ]
检测字符串是否不为空
if [ $str ]
不错不错