Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门

简介: Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门

@[toc]

如果想看更详细的Shell总结请到我之前写的博客https://blog.csdn.net/Redamancy06/article/details/126048299

1.Shell 概述

Shell是一个命令行解释器,他接受应用程序/用户命令,然后调用操作系统内核
在这里插入图片描述
Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强

1.1Linux 提供的 Shell 解析器有

[root@hadoop100 ~]# cat /etc/shells

加粗样式
ubuntu使用的解析器是dash

1.2bash 和 sh 的关系

  • [root@hadoop100 ~]# ls -l /bin/ | grep bash

在这里插入图片描述

1.3Centos 默认的解析器是 bash

[root@hadoop100 ~]# echo $SHELL
在这里插入图片描述

2.Shell 脚本入门

2.1脚本格式

脚本以#!/bin/bash 开头(指定解析器)

2.2第一个 Shell 脚本:helloworld.sh

一般情况下加上.sh后缀,也可以不加.sh后缀

2.2.1需求

创建一个 Shell 脚本,输出 helloworld

2.2.2实践

先创建一个目录scripts(可以不创建,我这里为了好管理,又重新创建了一个目录),然后进入该目录,在目录里创建一个hello.sh的文件,进行编辑
[root@hadoop100 ~]# mkdir scripts
[root@hadoop100 ~]# cd scripts/
[root@hadoop100 scripts]# touch hello.sh
[root@hadoop100 scripts]# vim hello.sh
在这里插入图片描述
在hello.sh中写如下代码

!/bin/bash

echo "hello,world"
在这里插入图片描述

2.3脚本的常用执行方式

2.3.1第一种:采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限)

2.3.1.1sh+脚本的相对路径

[root@hadoop100 scripts]# sh ./hello.sh
在这里插入图片描述

2.3.1.2sh+脚本的绝对路径

[root@hadoop100 scripts]# sh /root/scripts/hello.sh

在这里插入图片描述

2.3.1.3bash+脚本的相对路径

[root@hadoop100 scripts]# bash ./hello.sh
在这里插入图片描述

2.3.1.4bash+脚本的绝对路径

[root@hadoop100 scripts]# bash /root/scripts/hello.sh

在这里插入图片描述

2.3.2第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)

2.3.2.1首先要赋予 helloworld.sh 脚本的+x 权限

[root@hadoop100 scripts]# chmod +x hello.sh

在这里插入图片描述

2.3.2.2执行脚本

2.3.2.2.1相对路径

[root@hadoop100 scripts]# ./hello.sh

在这里插入图片描述
[root@hadoop100 scripts]# hello.sh
在这里插入图片描述
如果直接这样敲的话就会被认为是一条命令去执行

2.3.2.2.1绝对路径

[root@hadoop100 scripts]# /root/scripts/hello.sh

在这里插入图片描述

2.3.3注意

第一种执行方法,本质是 bash 解析器帮你执行脚本,所以脚本本身不需要执行 权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。

2.3.4第三种:在脚本的路径前加上“.”或者 source(了解)

2.3.4.1 source命令绝对路径

在这里插入图片描述

2.3.4.2source命令相对路径

在这里插入图片描述

2.3.4.3 “.”命令绝对路径

在这里插入图片描述

2.3.4.4 “.”命令相对路径

在这里插入图片描述

2.3.4.5注意在这里插入图片描述

这两个的区别在于第一个“.”是命令,而下面那个表示的是相对路径,因为“.”第三种情况是使脚本内容在当前 shell 里执行,所以不用加/来表示相对路径,而第一种和第二种是打开一个子 shell 来执行脚本内容,所以需要加./来表示相对路径

2.3.7子shell

在这里插入图片描述
相当于嵌套for循环,子shell的变量在父shell里面不能用,如果退出的话是先从最内层退出,然后再到最外层,相当于在在for循环里面写break,是一层一层的退出

2.3.6一般使用第二种方式执行脚本语言

2.3.6.1如果把要执行的脚本放到系统命令里(bin目录或者sbin目录)

在这里插入图片描述
但是这种情况不靠谱,因为这个目录里面是系统的命令,因此不要轻易更改

在这里插入图片描述

2.3.6.2更改环境变量

可以通过更改环境变量来直接执行脚本,可以将hello.sh放到/root/bin里面,或者直接将scripts目录放到环境变量里也可以
在这里插入图片描述

2.3.7总结

原因: 前两种方式都是在当前 shell 中打开一个子 shell 来执行脚本内容,当脚本内容结束,则 子 shell 关闭,回到父 shell 中。
第三种,也就是使用在脚本路径前加“.”或者 source 的方式,可以使脚本内容在当前 shell 里执行,而无需打开子 shell!这也是为什么我们每次要修改完/etc/profile 文件以后,需 要 source 一下的原因。
开子 shell 与不开子 shell 的区别就在于,环境变量的继承关系,如在子 shell 中设置的 当前变量,父 shell 是不可见的。

比如 更改linux中的.profile配置文件,发现没有及时生效,然后直接source 改过的文件,所有更改的环境配置文件都生效了

如果想看更详细的Shell总结请到我之前写的博客http://t.csdn.cn/cQArA

相关文章
|
2月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
408 9
|
2月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
291 2
|
5月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
263 60
|
2月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
4月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
519 1
|
关系型数据库 MySQL Shell
【Linux命令】-bash: mysql: command not found
【Linux命令】-bash: mysql: command not found
235 0
|
Shell Linux
Linux pip命令报错 -bash: pip: command not found
Linux pip命令报错 -bash: pip: command not found
480 0
|
Linux
LINUX用户执行过的命令,保存在.bash_history
LINUX用户执行过的命令,保存在.bash_history
165 0
|
Shell Linux
【快速入门Linux】3_Linux命令—终端命令格式、命令帮助信息、bash标准输入输出
【快速入门Linux】3_Linux命令—终端命令格式、命令帮助信息、bash标准输入输出
198 0
【快速入门Linux】3_Linux命令—终端命令格式、命令帮助信息、bash标准输入输出
|
Linux
LINUX用户执行过的命令,保存在.bash_history
LINUX用户执行过的命令,保存在.bash_history
207 0

热门文章

最新文章