基本用法
参数传递
#!/bin/bash
# 通过-n参数来判断参数长度是否为空,注意需要添加双引号
if [ -n "$*" ]; then
echo "是否有参数:有"
else
echo "是否有参数:无"
fi
if [ -n "$1" ]; then
echo "是否有第一个参数:有,值为:$1"
if [[ $1 -eq 100 ]]; then
echo "[1]第一个参数等于100"
else
echo "[1]第一个参数不等于100"
fi
else
echo "是否有第一个参数:无"
fi
if [[ $1 -eq 100 ]]; then
echo "[2]第一个参数等于100"
else
echo "[2]第一个参数不等于100"
fi
if [[ $1 == 100 ]]; then
echo "[3]第一个参数等于100"
else
echo "[3]第一个参数不等于100"
fi
echo "当前文件名称:$0"
echo "参数个数为:$#"
# $*表示将所有的参数组合成一个更长的字符串
echo "所有参数为:$*"
# $@表示将所有参数放进一个容器中
echo "所有参数为:$@"
echo "第一个参数为 $1"
for i in $*
do
echo "\$*获取参数:$i"
done
for i in $@
do
echo "\$@获取参数:$i"
done
变量
- 单引号中使用
$
引用变量会当做普通字符串而不是变量值,双引号可以取变量值
# substring功能
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
# indexOf查找任意一个字符的功能(示例查找i、o)
string="runoob is a great site"
echo `expr index "$string" io` # 输出 4
# 定义变量
your_name="jack"
echo "hello, $your_name!"
echo 'hello, '${your_name}'!'
# 获取字符串长度
echo "length of your name: ${#your_name}"
# 比较字符串大小、是否相等
str1="$1"
str2="$2"
if [ "$str1" == "$str2" ]; then
echo "str1==str2"
elif [[ "$str1" > "$str2" ]]; then
echo "str1>str2"
else
echo "str1<str2"
fi
数组
#!/bin/bash
# 数组
array_name=(
value0
value1
value2
value3
)
echo "第一个元素:${array_name[0]}"
# 修改第一个元素的值
array_name[0]="value00"
echo "一次打印所有数组元素:${array_name[*]}"
echo "一次打印所有数组元素:${array_name[@]}"
# 取得数组元素的个数
length=${#array_name[@]}
# 取得数组单个元素的长度
lengthn=${#array_name[2]}
# 使用for-in遍历数组
for i in ${array_name[@]}
do
echo $i
done
#使用while遍历数组
j=0
while [ $j -lt ${#array_name[@]} ]
do
echo ${array_name[$j]}
let j++
done
# 使用类似于java的编写方式来遍历数组
for (( k=0; k<${#array_name[*]}; k++ )) {
echo ${array_name[k]}
}
运算符
- [] 表达式
注意:在 [] 表达式中,常见的 >, < 需要加转义字符,表示字符串大小比较,以 acill 码位置作为比较。不直接支持 >, < 运算符,还有逻辑运算符 、&& ,它需要用 -a[and] –o[or] 表示。
- [[ ]] 表达式
注意:[[]] 运算符只是 [] 运算符的扩充。能够支持 >, < 符号运算不需要转义符,它还是以字符串比较大小。里面支持逻辑运算符: && ,不再使用 -a -o。
流程控制
# if-elif-else-fi
str1="$1"
str2="$2"
if [ "$str1" == "$str2" ]; then
echo "str1==str2"
elif [[ "$str1" > "$str2" ]]; then
echo "str1>str2"
else
echo "str1<str2"
fi
# for
array_name=(aaa bbb ccc)
for ele in ${array_name[@]}
do
echo $ele
done
for ((i=0;i<${#array_name[@]};i++))
do
echo ${array_name[$i]}
done
# while case
while true
do
echo "请输入1-5之间的数字"
read aNum
case $aNum in
1|2)
echo "你输入的数字是1或者是2,继续执行"
continue
;;
3|4|5)
echo "你输入的数字为:$aNum"
;;
*)
echo "你输入的不是1-5之间的数字,结束"
break
;;
esac
done
函数调用
#!/bin/bash
function func1() {
echo "调用func1函数======"
# 必须返回整型值
return 100;
}
func1
echo "方法func1的返回值:$?"
# 获取参数
function func2() {
echo "调用func2函数======"
echo "第一个参数:$1"
echo "第一个参数:$2"
echo "获取当前文件名称:$0"
echo "获取所有的参数:$*"
echo "获取所有的参数:$@"
}
func2 zhangsan lisi
注释
:<<'
注释内容...
注释内容...
注释内容...
'
:<<!
注释内容...
注释内容...
注释内容...
!