Shell传参
#!/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
$ chmod +x test.sh$ ./test.sh 1 2 3Shell 传递参数实例!执行的文件名: ./test.sh第一个参数为:1第二个参数为: 2第三个参数为: 3
另外,还有几个特殊字符用来处理参数:
$#:传递到脚本的参数个数
$*:以一个单字符显示所有向脚本传递的参数
$$:脚本运行的当前进程号ID
$!:后台运行的最后一个进程的ID号
$@:与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-:显示Shell使用的当前选项,与set命令功能相同。
$?:显示最后命令的退出状态。0表示没有错误,其他值表示有错误。
#!/bin/bash
echo "Shell 传递参数实例!";
echo "第一个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
结果为:
$ chmod +x test.sh$ ./test.sh 1 2 3Shell 传递参数实例!第一个参数为: 1参数个数为: 3传递的参数作为一个字符串显示: 1 2 3
shell数组
.一维数组
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小
array_name=(value1 value2 ... valuen)
示例:
my_array=(A B "C" D)
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"
#!/bin/bash
#数组测试
namesAry=(张三 '李四' 王五 '赵六')
namesAry[4]="孙悟空"
namesAry[5]="猪八戒"
namesAry[10]="唐僧"
#输出数组中的所有元素
echo "输出数组中的所有元素"
echo ${namesAry[*]}
echo "输出索引为6,7,8,9的元素"
echo ${namesAry[6]} ${namesAry[7]} ${namesAry[8]} ${namesAry[9]} ${namesAr y[10]}
echo "输出数组的长度"
echo ${#namesAry[*]}
#输出某个元素
#echo $namesAry[0]
#echo '-------------'
#echo ${namesAry[0]}
#echo ${namesAry[1]}
#echo ${namesAry[2]}
#echo ${namesAry[3]}
#echo "输出下标为4的元素:结果为空"
#echo ${namesAry[4]}
关联数组
Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。
declare -A array_name
-A 选项就是用于声明一个关联数组。
declare -A site=(["google"]="www.google.com" [ "taobao"]="www.taobao.com")
或者
declare -A site
site["google"]="www.google.com"
site["taobao"]="www.taobao.com"
array_name[ "index" ]
declare -A site
site["google"]="www.google.com"
site["taobao"]="www.taobao.com"
echo ${site["google"]}
结果为:
www.google.com
获取数组中的所有元素
#!/bin/bash
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
输出结果:
$ chmod +x test.sh$ ./test.sh数组的元素为 : A B C D数组的元素为 : A B C D
在数组前加一个感叹号 ! 可以获取数组的所有键,例如:
declare -A site
site["google"]="www.google.com"
site["taobao"]="www.taobao.com"
echo "数组的键为: ${!site[*]}"
echo "数组的键为: ${!site[@]}"
结果为:
数组的键为 : google taobao数组的键为 : google taobao
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同
#!/bin/bash
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"
结果为:
$ chmod +x test.sh$ ./test.sh数组元素个数为 : 4数组元素个数为 : 4
Shell基本运算符
Shell 和其他编程语言一样,支持多种运算符,包括:
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"
结果
两数之和为 : 4
注意:
算数运算符
#!/bin/bash
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a 等于 b"
fi
if [ $a != $b ]
then
echo "a 不等于 b"
fi
结果:
a + b : 30a - b : - 10a * b : 200b / a : 2b % a : 0a 不等于 b
注意:
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
-eq 检测两个数是否相等,相等返回true
-ne 检测两个数是否不相等不相等则返回true
-gt 检测左边的数是否大于右边的,如果是,返回true
-lt 检测左边的数是否小于右边的,如果是,返回true
-ge 检测左边的是否大于等于右边的,如果是,返回true
-le 检测左边的数是否小于右边的,如果是,返回true
示例:
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a 不等于 b"
else
echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a 大于 b"
else
echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a 小于 b"
else
echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a 大于或等于 b"
else
echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a 小于或等于 b"
else
echo "$a -le $b: a 大于 b"
fi
结果:
10 -eq 20 : a 不等于 b10 -ne 20 : a 不等于 b10 -gt 20 : a 不大于 b10 -lt 20 : a 小于 b10 -ge 20 : a 小于 b10 -le 20 : a 小于或等于 b
布尔运算符
! 非运算,表达式为true则返回false,否则返回true
-o 或运算,有一个表达式为true则返回true
-a 与运算,两个表达式都为true才返回true
#!/bin/bash
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a == $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi
结果:
逻辑运算符
&& 逻辑的AND
|| 逻辑的OR
#!/bin/bash
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
if [[ $a -lt 100 || $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
结果:
返回 false返回 true