• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. 传参
    1. 1.1. 变量的判断
  2. 2. 运算
    1. 2.1. 方法1 $((expression))
    2. 2.2. 方法2 $[expression]
    3. 2.3. 方法3 let关键字
    4. 2.4. 方法4 使用expr
    5. 2.5. 关系运算
    6. 2.6. 布尔运算
    7. 2.7. 字符串运算
  3. 3. 文件测试运算符

2.1、shell编程(2)-从入门到重新入门

2018-03-05 00:52:22
总字数 1.4k
预计阅读时间 5 分钟

传参

在外部执行时可以给脚本传参
在脚本当中获取时 , $0是执行的文件路径
$1代表第一个参数 , $2代表第二个参数 , 以此类推

1
2
3
4
5
6
7
8
9
10
11
12
13
echo "当前文件:$0"
echo "第一个参数:$1"
#参数个数
echo "共传入$#个参数"

#遍历所有的参数
for arg in $@
do
echo $arg
done

#脚本运行进程的ID
echo "PID:$$"

执行脚本

1
2
3
4
./test.sh aa bb

#如果参数内容包含空白, 要加引号才能作为一个参数传递
./test.sh aa "bb cc"

变量的判断

对于shell脚本来说 , 传参通常是比较灵活的
所以经常需要判断是否传入了这个参数

1
2
3
4
5
6
if [ -n "$1" ]
then
echo "包含第一个参数"
else
echo "未包含第一个参数"
fi

这是判断某个变量是否有值的方式
因为解释型语言的语法比较松散 , 对于变量先定义后使用没有严格要求
所以直接使用一个变量而不进行检查可能造成灾难性的后果

运算

原生bash对数学运算的支持比较有限

方法1 $((expression))
1
2
3
4
num1=3
num2=4
echo $((num1+num2))
echo $((num1**num2)) #乘方

变量的引用加不加$都可以 , 不能计算浮点数

方法2 $[expression]
1
2
3
num1=3
num2=4
echo $[num1+num2]

变量的引用加不加$都可以 , 不能计算浮点数

方法3 let关键字
1
2
3
4
num1=3
num2=4
let sum=$num1+$num2
echo $sum

变量的引用加不加$都可以 , 不能计算浮点数 , 加号两端不能有空格

方法4 使用expr

这是一个内建的用于数学运算的命令
需要注意的是运算符两边必须要有空格

1
2
3
4
5
6
7
8
9
10
11
12
13
expr 2 + 6
expr 4 - 9
#注意为了防止歧义 乘法要写 \* 而不能直接写 *
expr 5 \* 4
#除法保留整数
expr 9 / 2
#取余
expr 9 % 2

#浮点数计算
expr "3.9 + 1.8"|bc
#scale表示保留到的小数位数
expr "scale=3;1.2 * 8.73"|bc

关系运算

bash当中原生支持关系运算

比较是否相等

1
2
3
4
5
6
7
8
9
if [ $a == $b ]
then
echo "相等"
fi

if [ $a != $b ]
then
echo "不相等"
fi

|运算符|含义|其他表示方式|备注|
|—–|—|———|
|-eq|是否相等|==||
|-ne|是否不相等|!=||
|-gt|大于|>||
|-lt|小于|<||
|-ge|大于等于|>=|使用>=需要使用(( ))|
|-le|小于等于|<=|使用<=需要使用(( ))|

1
2
3
4
5
6
7
8
9
if [ $a -ge $b ]
then
echo "大于等于"
fi
# 等价于上面的写法, 注意用(( ))
if (( $a >= $b ))
then
echo "大于等于"
fi

关系运算符只能用于整数 , 或者能够解析为整数的字符串

布尔运算

运算符含义其他表示方式
!非
-o或||
-a与&&
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# a小于10 并且 b大于20
if [ $a -lt 10 -a $b -gt 20 ]
then
echo "yes"
else
echo "no"
fi
# 与上面的含义相同, 但是注意使用[[ ]]
if [[ $a -lt 10 && $b -gt 20 ]]
then
echo "yes"
else
echo "no"
fi

说明
推荐使用 [[ ... ]] 条件判断结构,而不是 [ ... ],能够防止脚本中的许多逻辑错误。比如,&&、|| 操作符能够正常存在于 [[ ]] 条件判断结构中,但是如果出现在 [ ] 结构中的话,会报错。

字符串运算

运算符含义
=两个字符串是否相同(区别于数字的比较)
!=两个字符串是否不相同
-z字符串长度为0返回true
-n字符串长度不为0返回true
1
2
3
4
5
6
7
8
9
10
11
12
13
a="123"
b="456"
if [ $a = $b ]
then
echo "相同"
else
echo "不同"
fi
# 字符串本身也可以用作判断条件
if [ ! $a ]
then
echo "字符串为空"
fi

使用-n和-z的时候需要注意 , 需要在字符串变量引用上加双引号

1
2
3
4
if [ -n "$a"]
then
echo "OK"
fi

如果不加双引号 , 当a为空的时候 , 相当于执行
if [ -n ] , 这个时候会把里面的**-n**当做一个普通字符串来处理 , 而不是运算符
自然每次都会是true , -z 同理

文件测试运算符

一个字符串也可以表示一个文件(目录)的路径
使用这些方式可以获得这个文件的各种信息

运算符含义
-b file检测文件是否是块设备文件,如果是,则返回 true
-c file检测文件是否是字符设备文件,如果是,则返回 true
-d file检测文件是否是目录,如果是,则返回 true
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true
-g file检测文件是否设置了 SGID 位,如果是,则返回 true
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true
-p file检测文件是否是有名管道,如果是,则返回 true
-u file检测文件是否设置了 SUID 位,如果是,则返回 true
-r file检测文件是否可读,如果是,则返回 true
-w file检测文件是否可写,如果是,则返回 true
-x file检测文件是否可执行,如果是,则返回 true
-s file检测文件是否为空(文件大小是否大于0),不为空返回 true
-e file检测文件(包括目录)是否存在,如果是,则返回 true
1
2
3
4
5
6
7
filepath=/usr/local/test.txt
if [ -e filepath ]
then
echo "文件存在"
else
echo "文件不存在"
fi
  • linux
  • shell
  • linux

扫一扫,分享到微信

2.0、shell编程(1)-初见
7.0、使用浏览器访问MongoDB 
© 2026 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • flutter
  • dart
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • git
  • 版本控制
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • Java
  • flutter
  • MongoDB
  • JavaScript
  • Git
  • 男生女生
  • 算法
  • linux
  • react
  • 前端杂烩
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆