Linux的从零开始(第七天)

Shell传参

#!/bin/bash 
echo "Shell 传递参数实例!"; 
echo "执行的文件名:$0"; 
echo "第一个参数为:$1"; 
echo "第二个参数为:$2"; 
echo "第三个参数为:$3";
为脚本设置可执行权限,并执行脚本,输出结果如下所示:
$ chmod +x test.sh
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名: ./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 3
Shell 传递参数实例!
第一个参数为: 1
参数个数为: 3
传递的参数作为一个字符串显示: 1 2 3

 shell数组

.一维数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小

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 命令来声明,语法格式如下:
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 和其他编程语言一样,支持多种运算符,包括:

算数运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加( 注意使用的是反引号 ` 而不是单引号 ' ):
#!/bin/bash 
val=`expr 2 + 2` 
echo "两数之和为 : $val"

结果

两数之和为 : 4

 注意:

表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2
完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边

算数运算符

算术运算要求操作数必须是数值
#!/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 : 30
a - b : - 10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b

 注意:

乘号(*)前边必须加反斜杠(\)才能实现乘法运算
在 MAC 中 shell 的 expr 语法是: $((表达式)) ,此处表达式中的 "*" 不需要转义符号 "\" 。

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字

-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 不等于 b
10 -ne 20 : a 不等于 b
10 -gt 20 : a 不大于 b
10 -lt 20 : a 小于 b
10 -ge 20 : a 小于 b
10 -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

结果:

10 != 20 : a 不等于 b
10 小于 100 20 大于 15 : 返回 true
10 小于 100 20 大于 100 : 返回 true
10 小于 5 20 大于 100 : 返回 false

逻辑运算符

&& 逻辑的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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值