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

简介: 采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限)、采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)、在脚本的路径前加上“.”或者 source(了解)原因: 前两种方式都是在当前 shell 中打开一个子 shell 来执行脚本内容,当脚本内容结束,则 子 shell 关闭,回到父 shell 中。第三种,也就是使用在脚本路径前加“.”或者 source 的方式,`可以使脚本内容在当前 shell 里执行,而无需打开子 shell!`这也是为什么我们每次要修改完

@[toc]

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

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

目录
相关文章
|
1天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
3月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
220 6
|
26天前
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
30 2
|
1月前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
71 4
|
1月前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
1月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
2月前
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
2137 4
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
70 1
|
3月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决