首页 > 系统相关 >shell脚本基础

shell脚本基础

时间:2022-10-23 09:12:28浏览次数:62  
标签:脚本 shell 变量 基础 命令 执行 bash

作用与应用场景

 

用途

  • 自动化常用命令
  • 执行系统管理和故障排除
  • 创建简单的应用程序
  • 处理文本或文件

应用场景

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

常见的shell

查看/etc/shells,里面是linux包含的shell

 

 

 

bash是大多linux版本默认的shell

基本结构

  • 脚本申明(申明解释器) :第一行开头 “#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来执行。还有其他类型的解释器,比如 #/usr/bin/python、#!/usr/bin/expect 。
  • 注释信息: 以“#”开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行。
  • 可执行语句: 如echo命令,用于输出“ ”之间的字符串。

 

 

shell脚本的执行

1、指定路径去执行文件,文件需要有执行权限。

chmod +x AAA.sh

绝对路径:/root/mzs/AAA.sh

相对路径:./AAA.sh

 

 

2、指定解释器去执行(bash 脚本名),不需要执行权限。

bash 脚本路径

sh 脚本路径

 

 

 

source 脚本路径(source可以用 . 代替)

source命令是一个内置的shell命令,用于从当前shell会话中的文件读取和执行命令。source命令通常用于保留、更改当前shell中的环境变量。简而言之,source一个脚本,将会在当前shell中运行execute命令。

sh,bash、绝对路径、相对路径 执行脚本时,会创建一个子shell环境,并在这个子shell环境中执行脚本。

source和 . 执行脚本时,会在当前shell环境中执行脚本

错误调试

  1. 命令错误: 命令错误不会影响接下来的命令,之后的命令会继续执行。
  2. 语法错误: 会导致后续的命令不执行。造成脚本中一部分命令已执行,一部分未执行。
  3. 逻辑错误: 执行后的效果不是自己想要的。需要自己去排查

bash -n 脚本名称 //只检查语法错误,不真正执行脚本。定位的错误行可能不准确。

bash -x 脚本名称 //显示每个命令的执行过程,方便发现逻辑错误

重定向与管道操作

交互式硬件设备

标准输入:从该设备接收用户输入的数据     /dev/stdin   0

标准输出:通过该设备向用户输出数据         /dev/stdout  1

标准错误:通过该设备报告执行出错信息      /dev/stderr   2

重定向操作

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

管道符

x1 |  x2     链接多个命令,把命令x1的结果作为命令x2的操作对象

如果管道符合右边是一定需要执行对象的命令,则管道符号 后面要有 xargs 命令来传递执行参数 (x1 |  xargs x2)

shell变量

自定义变量

sheLl脚本给变量赋值的方式

变量名=变量值

例:name=1

查看变量的值:

echo &变量名

unset可以取消变量  例 :unset name

赋值时使用引号

双引号" ":会把引号的内容当成整体来看待。强引用,识别变量,允许通过$符号引用其他变量值。 ​

 单引号' ':会把引号的内容当成整体来看待。弱引用,禁止引用其他变量值,单引号内的内容都会被认为是普通字符。 ​

 反撇号` ` 和 $() :调用命令执行后输出的结果。如果存在嵌套,不能使用反撇号。 ​

 花括号{ } :定义变量范围。 echo <span class="katex"><span class="katex-mathml">color{color}<span class="katex-html"><span class="base"><span class="strut"><span class="mord"><span class="mord mathnormal">c<span class="mord mathnormal">o<span class="mord mathnormal">l<span class="mord mathnormal">o<span class="mord mathnormal">r{price}


 

 

read命令

一:read  -p  “提示信息”  变量名

echo  $变量名

二:在脚本中编写,在命令行实现read获取

 

 

 

 

整数变量的运算

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串

 

 

 运算符:+ 加法、- 减法、* 乘法、/ 除法、% 取余

 

 

 

 

$( )和反撇号,可以调用命令的执行结果。

 

 

 

小数运算(浮点数运算)

bc计算

echo "浮点运算表达式" | bc

 

 

awk计算

awk "BEGIN{print 算术表达式}"

 

 

特殊的shell变量

环境变量

由系统提前创建,用来设置用户的工作环境 

配置文件:/etc/profile(全局生效)、~/.bash_profile(当前用户环境)

常见环境变量

env PATH HOME PWD USER

使用 env 命令可以查看到当前工作环境下的环境变量 

变量USER表示用户名称,

HOME表示用户的宿主目录,

LANG表示语言和字符集,

PWD表示当前所在的工作目录,

变量PATH表示可执行程序的默认搜索路径

 

 

 

(已经将该目录添加到路径环境变量中,目录内的所有具有执行权限的文件,都可以在当前环境任何目录中执行)

只读变量

用于变量值不允许被修改的情况

readonly  命令设置只读变量

只读变量不可以重新赋值

 

 

位置变量

当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。

n:n为数字,n:n为数字,n:n为数字,0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}

 

 

 

 

预定义变量

$#:表示命令行中位置参数的个数,传递到脚本的参数个数 

 @:与@:与@:与*相同,@以"@以"@以"1" “2 " … " 2" … "2"…"n” 的形式输出所有参数 

$?:显示上一条命令的退出状态;0表示没有错误,其他任何值表明有错误

$0:脚本本身

日期

date +%F显示现在日期

date +%Y -%m-%d 年月日

date +%T 显示时间 HMS几点几分几秒

-%H 为小时

%w 周几

date -d “-1day” 一天之前

date -d “1day” 一天之后

 

标签:脚本,shell,变量,基础,命令,执行,bash
From: https://www.cnblogs.com/ponyton/p/16817898.html

相关文章

  • shell脚本之条件语句
    一、test命令1、格式测试表达式是否成立,若成功返回0,否则返回其他数值 格式1:test条件表达式格式2:[条件表达式]二、文件测试1、格式 操作符、......
  • 安卓逆向 ARM基础篇
    1.ARM 与Andorid的关系android的操作系统是LINUX内核LINux又是ARM2.ARM汇编规范  3.ARM指令格式    ARM常用指令开始1.ARM的跳转指令  PC......
  • SQL中基础并重要的命令(1)
     SELECT语句用于从数据库中选取数据,结果被存储在一个结果表中,称为结果集,可以结合下面例子参考一下先说明SQL对大小写不敏感,意思就是select和SELECT是相同的。假如现......
  • JWT基础概念详解
    JWT基础概念详解JWT介绍之前我们文章讲过分布式session如何存储,其中就讲到过Token、JWT。首先,我们来回顾一下使用Token进行身份认证。客户端发送登录请求到服务器服......
  • 2022-2023-1 20221419 《计算机基础与程序设计》第8周学习总结
    2022-2023-120221419《计算机基础与程序设计》第8周学习总结作业信息班级:[2022-2023-1-计算机基础与程序设计]https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP......
  • Docker基础:Docker可视化面板portainer介绍
    今天给大家分享Docker可视化面板portainer工具介绍,希望对大家能有所帮助!1、什么是portainer?Portainer是Docker的图形化管理WEB工具,由GO语言编写的,提供状态显示、应用模板快......
  • Docker基础:容器元数据详解
    今天给大家介绍Docker容器元数据里面包含内容详解,如有不当之处,欢迎大家指正。查看容器元数据主要通过dockerinspect容器id进行查看。今天通过docker安装的mysql查看启动的......
  • 通过vbs语法不弹窗执行脚本
    vbs简介VBS是基于VisualBasic的脚本语言,简称VB。VBS的全称是:MicrosoftVisualBasicScriptEdition。vbs语法REM注释REM参数args1=WScript.Arguments.Item(0)a......
  • 用bash脚本统计代码行数
    获取单个文件行数文件:test1.sh行数:20方法一awk'{printNR}'test1.sh|tail-n1如图所示:方法二awk'END{printNR}'test1.sh如图所示:方法三grep-n""test1......
  • 重温Excel基础函数(17):Count、Counta、Countif、Countblank计数函数
    1概念Count函数:​统计含数值型数字的单元格的个数。Counta函数:统计非空单元格的个数。Countif函数:按条件统计单元格个数。Countblank函数:统计空单元格的个数。2语法01.Count......