Linux | Shell脚本的编写
2024-09-06 15:24:38
Shell 脚本的介绍
Shell脚本通过Shell终端解释器当作人与计算机硬件之间的翻译官,用户可以通过它执行各种命令,不仅有简单的,还有复杂的,比如:判断、循环、分支等这些高级编程中才有的特性。Shell 命令有两种工作方式:
交互式:用户每输入一条命令就立即执行。
批处理:由用户事先编写好一个完整的脚本,然后再一次性执行完Shell脚本中的命令。
交互式,比如:
# 输入系统的PATH变量到屏幕上
echo $PATH
批处理,就是把之前学习的Linux命令以及正则表达式,管道符,数据流重定向等语法规则结合到一起,再通过内部的逻辑语句进行处理,最终形成一个 Shell 脚本。
我们可以编写一个简单的脚本:
test.sh
#!/bin/bash
# 这个一行注释
pwd
ls -l
Shell 脚本的后缀名可以为任何类型,但是为避免用户误以为是普通文件,所以普遍将用 .sh 作用后缀名
上面这个脚本:
第一个行是声明脚本以 bin/bash 解析器解析。
第二行是注释,对脚本的功能介绍。
第三行,第四行, 是两个简单的命令,就是我们平时执行的命令。
使用脚本接收用户的参数
如果我们的脚本像上面简单的编写的话,那也太过死板了,不够灵活,不能处理多种情况,如果一个程序不能和用户交互的话,就是一个好的程序,所以必须要让程序接收用户的参数。
接收参数命令及作用
参数 | 作用 |
---|---|
$0 | 脚本的名称 |
$# | 参数的个数 |
$* | 对应所有的参数 |
$? | 上一次命令的返回 |
$n | 分别对应第n个位置的参数 |
exec.sh
#!/bin/bash
echo "脚本的名称为:$0"
echo "脚本一共有:$# 个参数,分别是:$*"
echo "第二个参数是:$2,第五个参数是:$5"
各个参数之间用空隔间隔
判断文件的参数
文件判断的参数
命令 | 作用 |
---|---|
-d | 判断文件是否为目录 |
-e | 判断文件是否为空 |
-f | 判断文件是否为一般文件 |
-r | 判断文件是否可读 |
-w | 判断文件是否可写 |
-x | 判断文件是否可以执行 |
中括号的前后最后留一个空格的距离
Shell 脚本中的判断不仅仅可以判断文件,还可以比较数值:
可用于整数比较的运算符
命令 | 作用 |
---|---|
-eq | 是否等于 |
-ne | 是否不等于 |
-gt | 是否大于 |
-lt | 是否小于 |
-le | 是否小于等于 |
-ge | 是否大于等于 |
还可以用来比较字符串是否相等:
命令 | 作用 |
---|---|
= | 比较字符串内容是否相等 |
!= | 比较字符串内容是否不相等 |
-z | 判断字符串内容是否为空 |
细节决定成败!
个人愚见,如有不对,恳请扶正!
最新文章
- ASP.NET MVC为字段设置多语言显示 [转]
- 【python】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- QQ左侧滑动显示
- form上传文件以及跨域异步上传
- 聚类算法kmeans
- Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds 解决方法
- linux下开启防火墙,打开端口
- Delphi开发ocx插件的调试
- Http Get Post put delete
- [技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档
- 自由的Debian
- 如何设置Cookie 的值为中文的内容
- Ubuntu下Java开发环境搭建(eclipse)
- Pie
- Winform C# 简单实现子窗口显示进度条
- 全面理解 ASP.NET Core 依赖注入
- 20.QT-Qpixmap实现图片鼠标缩放,鼠标拖动示例(详解)
- jq 点击复制div里面的内容 如果粘贴到富文本中,会将样式,里面所有的标签,文字一并粘贴进去
- [PHP] 适配器模式的日常使用
- C# 之 反射性能优化2
热门文章
- 在gin框架中使用JWT
- jquery 改变标签样式
- GPU编程和流式多处理器(三)
- python-selenium 引入包或者类的清晰写法
- selenium-python元素定位技巧(二)
- 操作系统-Linux命令
- 性能工具之Jmeter-Dubbo脚本开发
- 一文讲全了Python 类和对象内容
- 实验8、31个最重要的Python Flask面试问题和答案
- 10:ValueError: Cannot assign ";'2'";: ";Comment.article"; must be a ";Article"; instance