13、Linux-Shell02:参数传递和运算符

目录

一、参数传递

二、运算符

1、算术运算符(+、-、*、/、%、=、==、!=)

2、关系运算符

3、逻辑运算符

4、字符串运算符

5、文件运算符


一、参数传递

执行脚本时可以为脚本文件传递参数,在脚本中可以处理这些参数。

第n个参数,通过$n获取。下面两个例子表明了对参数的一些常见的使用方法。

java 复制代码
[root@VirTrxcx test]# cat var.sh 
#! /bin/bash
echo $1 # 获取第一个参数
echo $2 # 获取第二个参数
echo $# # 获取参数个数
echo $* # 获取所有参数
echo $@ # 获取所有参数
echo $? # 获取程序结束状态:0表示正常退出

# 传递参数的方法:执行脚本时后面以空格分开参数即可
[root@VirTrxcx test]# ./var.sh "hello,this is parameter1" "parameter2" "parameter3"
hello,this is parameter1
parameter2
3
hello,this is parameter1 parameter2 parameter3
hello,this is parameter1 parameter2 parameter3
0

\*和@都会获取所有参数,

区别在于\*把获取到的所有参数当成一个整体,而@把获取到的每个参数当成独立的引用。

java 复制代码
# 在这里展示$*和$@的区别,下面会循环输出二者的内容
for i in "$*";do
    echo $i
done

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

# 在这里设置一个bug
name="Trxcx"
readonly name
unset name
echo $?
[root@VirTrxcx test]# ./var.sh "p1" "p2"
p1 p2
p1
p2
./var.sh: line 14: unset: name: cannot unset: readonly variable
1

二、运算符

1、算术运算符(+、-、*、/、%、=、==、!=)

通过expr实现数学运算

java 复制代码
[root@VirTrxcx test]# cat var.sh 
#! /bin/bash
a=10
b=20

val=`expr $a \* $b + $b`
echo $val

if [ $a != $b ]
then
    echo "a doesn't equal b"
fi

[root@VirTrxcx test]# ./var.sh 
220
a doesn't equal b

要点说明:

  • Shell编程中有+-*/%等运算符号,但*前面必须加上\转义才能正确使用。
  • 运算符和数字(变量)之间应该以空格分隔
  • 条件表达式放在[]之间,应该存在空格分隔

2、关系运算符

假设a=10,b=20。

  • -eq:是否相等?[ a -eq b ] 返回 false。
  • -ne:是否不等?[ a -ne b ] 返回 true。

类似的:

  • -gt是大于
  • -lt是小于
  • -ge是大于等于
  • -le是小于等于

e是equal,g是greater,l是less,n是not,t是than,通过全称可以很容易记住缩写的含义。

3、逻辑运算符

  • -a:与运算;-o:或运算;!:非运算。使用方法:[ a -a b ]
  • &&:与运算;||:或运算。使用方法:[[ a \&\& b ]]

4、字符串运算符

  • =:字符串相等返回true。例如[ str1 = str2 ]。
  • !=:字符串不等返回true。例如[ str1 != str2 ]。
  • -z:字符串长度为0返回true。例如[ -z $str1 ]。
  • -n:字符串长度不为0返回true。例如[ -n $str1 ]。
  • :字符串不为空返回true。例如\[ str1 ]。

5、文件运算符

-r、-w、-x:文件是否可读、可写、可执行

-f、-d、-b、-c:文件是否是普通文件、是否是目录、是否是块设备文件、是否是字符设备文件

-s、-e:文件是否为空、文件是否存在

使用方法:[ -r $file ]

相关推荐
九河云5 小时前
华为云 ECS 弹性伸缩技术:应对业务峰值的算力动态调度策略
大数据·服务器·人工智能·物联网·华为云
夜月yeyue5 小时前
Linux内高端内存
linux·运维·单片机·嵌入式硬件·ci/cd·硬件架构
云宏信息5 小时前
运维效率提升实战:如何用轻量化云管平台统一纳管与自动化日常资源操作
运维·服务器·网络·架构·云计算
XINERTEL5 小时前
自动化测试的「千里眼」:当RTSM远程控制遇上自动化,测试效率直接拉满
运维·功能测试·自动化·以太网测试
猫豆~6 小时前
nginx实战-PHP——day2
linux·centos·云计算
杨云龙UP6 小时前
MySQL 自动备份与覆盖恢复实战:一套脚本搞定全库/按库备份恢复
linux·运维·数据库·sql·mysql
三小尛6 小时前
Linux的常见指令
linux
starvapour6 小时前
Ubuntu下sudo的免密操作
linux·ubuntu
sjg200104146 小时前
Deepin 20.9 误装gcc-8-base_8.4.0-1ubuntu1~16.04.1_amd64 后卸载
linux·运维·服务器
一帘忧梦6 小时前
linux 系统rcs脚本启动
linux·运维·lua