在执行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
~