Linux学习笔记-shell介绍

1、Shell环境

Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Linux 的 Shell 种类众多,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
  • ......

这里我使用的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。

在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh ,它同样也可以改为 #!/bin/bash。

#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

2、脚本执行

作为可执行程序,执行脚本命令示例:./test.sh

注意:一定要写成 ./test.sh,而不是 test.sh,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

作为解释器参数运行,执行脚本命令示例:/bin/sh test.sh

3、Shell参数传递

使用n获取脚本被传入的参数。注意0代表文件名,其他的就是1、2以此类推。使用示例如下:

结果:

还有一些特殊字符用来处理参数

|------|-----------------------------------|
| 参数处理 | 说明 |
| # | 传入的参数个数 | | * | 拼成单个字符串输出所有参数,如果有双引号",会把双引号一起输出 |
| $$ | 脚本运行的当前进程ID号 |
| ! | 用户自己启动的最后一个后台进程的进程ID号,后台自带的看不见 | | @ | 与\*的功能类似,区别在于如果有"会把所有参数逐个输出,不再拼接 | | - | 显示shell当前打开的所有选项 |
| $? | 表示上一条命令的执行结果,为0执行成功,非0表示执行出错 |

示例(这里主要测试\*和@的区别)

代码如下:

结果如下:

4、Sell注释

单行注释:#即可

多行注释(暂时只记一种):

:<<EOF

注释内容...

注释内容...

注释内容...

EOF

这个EOF可以被任意其他字符串替代(哪怕直接写注释二字都行)

相关推荐
吴声子夜歌1 小时前
Nginx应用与运维——Nginx负载均衡应用实战(二)
运维·nginx·负载均衡
lisanmengmeng1 小时前
NRPE 添加命令(一)
linux·运维·服务器
pt10431 小时前
CML网络仿真入门-2:使用CML模拟网络实验环境
运维·网络协议
树下水月2 小时前
Typora破解
linux·服务器·前端
沫璃染墨3 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
wuminyu3 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
深念Y3 小时前
rime-雾凇拼音-配置记录
linux·junit·软件·拼音·kde
HAHAXX83 小时前
电商RPA批量上架通用方案:一套流程如何同时跑通拼多多、抖店、淘宝和跨境平台
java·运维·rpa
零基础1233 小时前
LLM Agent 驱动的物模型构建:从设备手册到边缘接入的自动化实践
运维·人工智能·经验分享·python·自动化
星夜夏空993 小时前
网络编程(5)—— Reactor实现(v3)
服务器·网络·php