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 分钟前
Linux网络(十一):HTTP重定向与请求方法详解:从301/302状态码到GET/POST,再认识Fiddler抓包
linux·网络·http
KANGBboy9 分钟前
doris+kafka安装部署(单机+集群)六安装部署
linux
土星云SaturnCloud13 分钟前
ResNet-50 图像分类算法在边缘微服务器上的部署与性能评测
服务器·人工智能·算法·边缘计算·resnet-50
snow@li26 分钟前
服务器运维:堡垒机与服务器全景关系深度分析(架构、差异、协作、场景)
运维
爱和冰阔落30 分钟前
【Linux】手写日志与固定线程池:任务队列、工作线程和安全退出
linux·运维·c++·redis·安卓
Gl�ria1 小时前
Hadoop MapReduce / Hive 场景:ReduceTask 热点 Key 排查
运维·hadoop·数据倾斜
inkuu1 小时前
WSL启动慢问题分析与修复
linux
Dovis(誓平步青云)1 小时前
QQ 机器人怎么接上 AI?用 AstrBot + NapCat 搭一套可扩展的 DeepSeek 助手
服务器·人工智能·机器人·操作系统·电脑·智能化
snow@li1 小时前
服务器运维:K3S 下 Jenkins ↔ GitLab 的 CI/CD 闭环 / 访问成功
运维·gitlab·jenkins
志栋智能2 小时前
超自动化运维与DevOps的深度融合
运维·网络·人工智能·安全·自动化