shell脚本前置基础

2024-09-02 19:04
文章标签 基础 shell 脚本 前置

本文主要是介绍shell脚本前置基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • shell脚本
    • 概念
    • 应用场景
    • 作用
    • Linux中的Shell(解释器)
    • 脚本构成
      • 1.脚本申明(解释器):
      • 2.注释信息:
      • 3.可执行语句:
    • 脚本的执行
      • 方法一
      • 方法二
        • ---source 点命令 .
          • 功能
      • 三个执行脚本文件命令
        • 区别
          • 子shell的概念(shell列表的理念)
            • 目的
            • 示例
    • 重定向操作
    • 变量
      • 变量的作用
      • 变量作用范围
        • 局部变量
        • 全局变量
        • 主要特点
        • 潜在的副作用
      • 变量的类型
      • 变量名
      • 变量值
      • 查看变量的值
      • ---readonly 命令设置只读变量

shell脚本

shell是应该程序,也是一个解释器,用于“翻译”各种环境(弱语言)

概念

  • 将要执行的命令按顺序保存到一个文本文件
  • 给该文件可执行权限
  • 可结合各种Shell控制语句以完成更复杂的操

应用场景

  • 重复性操作
  • 交互性任务
  • 批量事务处理
  • 服务运行状态监控
  • 定时任务执行

作用

  • 自动化运维
  • 批量化重复操作可以编写脚本结合计划任务自动周期运行
  • 减轻管理员工作量
  • 提高处理文本文件的速度
  • 避免配置出错

Linux中的Shell(解释器)

检查一下/etc/shells这个文件,里面就是Linux所包含的Shell

  • sh:UNIX最初使用的 shell)已经被bash所替换

  • bash:基准开GNU的框架下发展出的Shell的扩展

  • csh:语法有点类似于c语言的Shell

  • tcsh:整合了csh,提供更多的功能。

  • nologin:奇怪的shell,这个shell可以让用户无法登录主机。

  • zsh

  • fish

注:bash(/bin/bash)是目前大多数 Linux 版本采用的默认 Shell

脚本构成

1.脚本申明(解释器):

#!/bin/bash:表示此行以下的代码语句是通过/bin/bash程序来解释执行

#!/bin/bash为默认解释器。

还有其它类型的解释器,比如 #!/usr/bin/python 、 #!/usr/bin/expect.

#! shebang ——》申明,此脚本使用哪个解释器环境/解释器类型

#/bin/bash 解释器类型

2.注释信息:

以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。

3.可执行语句:

比如echo命令,用于输出""之间的字符串

vim /root/first.sh

#!/bin/bash

#This is my first Shell-Script

cd /boot

echo"当前的目录位于:"
pwd
echo"其中以 vml 开头的文件包括:"

ls -lh vml*

脚本的执行

方法一

指定路径的命令,要求文件必须有 x权限

chmod +x /root/first.sh

指定绝对路径:/root/first.sh

指定相对路径:./first.sh

方法二

指定Shell来解释脚本,不要求文件必须有x权限

  • sh脚本路径:sh first.sh
  • source 脚本路径:.first.sh 或者 source first.sh
—source 点命令 .
功能

source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。因为linux所有的操作都会变成文件的格式存在。

生效范围是当前shell会话

三个执行脚本文件命令

  • source filename
  • sh filename
  • ./filename
区别
  • 当shell脚本具有可执行权限时,用sh filename与./filename是没有区别的。
    ./filename是因为当前目录没有在PATH中,所以".“是用来表示当前目录的。

  • sh 会重新建立一个子shell

子shell的概念(shell列表的理念)
目的

多进程并行处理任务

小括号()表示开启子shell列表

小括号中引用的命令表示嵌套子shell,(echo $BASH_SUBSHELL->查看当前子shell个数)

示例

(ls;echo $BASH_SUBSHELL)

也可以嵌套执行:

(ls(echo $BASH_SUBSHELL))
(ls(pwd(echo $BASH_SUBSHELL)))

以上操作为并行多进程处理任务

  • source 没有建立新的子shell。脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

重定向操作

类型操作符用途
重定向输入<从指定的文件读取数据
重定向输出>将标准输出结果 保存 到指定的文件,并且覆盖原有内容
>>将标准输出结果 追加 到指定的文件的尾部,不覆盖原有内容
重定向错误输出2>将错误信息 保存 到指定的文件,并且覆盖原有内容
2>>将错误信息 追加 到指定的文件的尾部,不覆盖原有内容
混合输出&>将标准输出、标准错误保存到同一文件中
2>&1将标准错误输出重定向到标准输出

变量

变量的作用

用来存放系统和用户需要使用的特定参数(值)

  • 变量名:使用固定的名称,由系统预设或用户定义
  • 变量值:能够根据用户设置、系统环境的变化而变化

变量作用范围

环境变量的全局配置文件为/etc/profile,在此文件中定义的变量作用于所有用户。

每个用户还有自己的独立配置文件(~/.bash profile)。可以用来长期变更或设置某个环境变量

局部变量

默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。

当进入子程序或新的子Shell环境时,局部变量将无法再使用。

可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shel!环境中能够继续使用。

格式1:expont 变量名

格式2:expont 变量名=变量值

全局变量

在程序或脚本中定义的具有全局范围的变量。

这意味着全局变量在整个程序或脚本的不同部分都是可见和可访问的,而不仅限于特定的函数、方法或代码块。

主要特点

全局范围: 全局变量在整个程序或脚本的各个部分都是可见和可访问的。

持久性: 全局变量的生命周期与程序的执行时间相同。它们在程序启动时创建,在程序结束时销毁。

共享性: 全局变量可以在程序的不同函数或方法之间共享数据。这样,多个函数可以使用和修改相同的全局变量,

潜在的副作用

全局变量的使用可能导致副作用和潜在的复杂性。

因为全局变量是可访问的,所以它们可以被任何函数修改,

这可能导致程序状态的不确定性和难以调试的问题。

变量的类型

  • 自定义变量:由用户自己定义、修改和使用
  • 特殊变量:环境变量,只读变量,位置变量,预定义变量
环境变量:由系统提前创建,用来设置用户的工作环境
位置变量:用于将外部数据传递给脚本或程序,以便根据需要进行处理。 ($1 $2 )
预定义变量:通常由编程语言或脚本解释器提供,并根据需要自动设置和更新,不能修改"$*":把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4"。
"$@":把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表"$1" "$2" "$3" "$4"。$0:表示当前执行的脚本或命令的名称。
$#:表示命令或脚本要处理的参数的个数。	
$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。也常被用于Shell脚本中return退出函数并返回的退出值。

变量名

使用固定的名称,由系统预设或用户定义

  1. 不要使用系统的命令作为变量名
  2. 不要使用中文
  3. 不能特殊符号开头 可以用_来开头
  4. 在指定变量名的时候有一个默认的规则:计算机:computer 学生:student
  5. 要有注释,还要注意前后一致
  6. 只能包含字母、数字、下划线
  7. 严格区分大小写

变量值

能够根据用户的设置、系统环境的变化而变化

int 整形: 1 2 13 444string 字符串: zhangsan  lisi  abc123布尔值: true   false  0 1——》判断的是指定条件的“真”or“假”,通常用于分支判断浮点flot: 1.1 2.2双精度浮点值: 1.2131txt: 文本类型

自定义变量

由用户自己定义、修改和使用

定义新的变量
格式:变量名=变量值
变量命名规则:以字母或下划线开头,区分大小写
product=benet

version=6.0
name="zhang san“

查看变量的值

格式:echo$变量名
echo $product
echo $product $version
echo ${product}40
${}是一种特殊的语法形式,用于获取变量的值或者对变量进行操作。
语法可以应用于任何变量名称,其中变量名称放在花括号中,例如 {}语法可以应用于任何变量名称,其中变量名称放在花括号中,例如 语法可以应用于任何变量名称,其中变量名称放在花括号中,例如{product},其中VAR是变量名

—readonly 命令设置只读变量

product=benetreadonly product		#设置为只读变量echo $productproduct=accp				#只读变量不可以被重新赋值unset product				#只读变量不可以被删除(需要强制),unset 命令用于删除常规变量

这篇关于shell脚本前置基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130801

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、