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

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

python写个唤醒睡眠电脑的脚本

《python写个唤醒睡眠电脑的脚本》这篇文章主要为大家详细介绍了如何使用python写个唤醒睡眠电脑的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 环境:win10python3.12问题描述:怎么用python写个唤醒睡眠电脑的脚本?解决方案:1.唤醒处于睡眠状

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模