shell 参数传递

在执行shell 脚本的时候,向脚本传递参数,传递的方式是: $n,  n=1 代表传递的是第一个数字,n=2 传递的是第二个数字,依次类推。

echo "shell 传递参数"
echo "文件名称:" $0
echo "第一个参数:" $1
echo “第二个参数:” $2

执行:./test.sh 1 2 3
输出:
shell 传递参数
文件名称: ./test.sh
第一个参数: 1
“第二个参数:” 2

另外还有几个特殊字符用来处理参数:

  • $# 传递到脚本的参数个数
  • $* 以一个字符串的方式输出所有的参数
  • $$ 脚本运行的当前进程ID 号
  • $! 后台运行的最后一个进程的ID 号
  • $@ 和$* 一样,
#!/bin/zsh
echo "shell 传递参数"
echo "文件名称:" $0
echo "第一个参数:" $1
echo "第二个参数:" $2
echo "总共参数个数:" $#
echo "输出全部参数:" $*  输出的方式 "1 2 3"
echo "输出所有参数:" $@  输出的方式 "1" "2" "3"


输出:
shell 传递参数
文件名称: ./test.sh
第一个参数: 1
第二个参数: 2
总共参数个数: 3
输出全部参数: 1 2 3
输出所有参数的个数: 1 2 3

脚本中在加入:
for i in "$*"; do
echo $i
done

for i in "$@"; do
echo $i
done

运行后输出 
1 2 3
1
2
3

这样就可以看出 $@ 和 $* 的区别了,$* 输出了整理参数,所以是一行, 

$@ 是输出每一个参数,所以会输多行

数组

初始化的时候不需要定义数组的大小,index 从0开始,支持1维数组,不支持多维

对数组的一些操作

my_array=(a b c)
echo "array element of: ${my_array[1]}"
echo "all array: ${my_array[@]}"
echo "all array: ${my_array[*]}"

echo "array length: ${#my_array[*]}"

输出:

array element of: a
all array: a b c
all array: a b c
array length: 3

基本运算符

原生的bash命令不支持这些数学运算,但是可以通过 awk, expr 等命令执行

expr 是一款表达式计算工具,可以完成求值操作

val=`expr 2 + 1`
echo "来那个数之和: $val"

有两点需要注意

  • 运算符之间需要有空格 2 + 2, 2+2 是错误的
  • 完整的表达式需要被 ` ` 包含,

算数运算符:

a=10
b=20

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 $a \* $b`  # 乘号*前必须加上 \ 才能实现乘法运算
echo "a * b: $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

关系运算符:

  • -eq: 相等返回 true
  • -ne: 不相等返回 true
  • -gt: 左边是否大于右边,大于返回true
  • -lt:左边是否小于右边,小于返回true
  • -ge: 左边是否大于等于右边,大于等于返回true
  • le: 左边是否小于等于右边,小于等于返回true
#!/bin/zsh
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 -ge $b: a小于或者等于b"
else
        echo "$a -ge $b: a大于b"
fi

布尔运算

  • ! 非元素
  • -o 或运算
  • -a 与运算

逻辑运算

  • && 逻辑and 运算
  • || 逻辑OR 

字符串运算符

  • =  左右两个字符相等,返回 true
  • != 左右两个字符不相等,返回true
  • -z 字符长度为0 返回true
  • -n 字符长度不为0 返回true
  • str 字符不为空 返回true  # 只是字符本身
#!/bin/zsh
a="abc"
b="efg"
if [ $a = $b]
then
        echo "$a = $b: a等于b"
else
        echo "$a = $b: a不等于b"
fi

if [ $a != $b]
then
        echo "$a != $b: a不等于b"
else
        echo "$a != $b: a 等于b"
fi

if [ -z $a]
then
        echo "$a: a的长度为0"
else
        echo "$a: a的长度不为0"
fi

if [ -n $a ]
then
        echo "$a: a长度不为0"
else
        echo "$a: a的长度为0"
fi

if [ $a ]
then
        echo "$a: a为空"
else
        echo "$a: a不为空"
fi
~

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值