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

相关文章

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

centos6一键安装vsftpd脚本

centos6一键安装vsftpd脚本 手动安装vsftpd参考教程:Centos下安装Vsftpd的图文教程 vsftpd脚本功能: 1.安装 (命令执行:sh xxx.sh)2.添加ftp用户 (命令执行:sh xxx.sh add)3.卸载vsftpd (命令执行:sh xxx.sh uninstall) 测试环境:centos6 x64 centos6 x86(测试centos7以