Shell脚本01

news2024/11/18 15:09:04

一、shell脚本

脚本就是可运行的代码的集合,脚本语言(计算机语言)。

脚本的特点:从上到下,按行执行。

shell 脚本就是在shell环境(bin/bash)bash就是shell解释器,linux环境下的编程语句。

使用shell脚本可以实现自动化运维,可重复执行的自动化的在系统中实现,增删改查的操作。

1.1、常见的解释器

sh:已经淘汰

bash:sh的扩展版

csh:类似c语言

tcsh:整合c语言的shell

nologin:用户无法登录到系统的shell

shell的解释器,默认就是bash

1.2、shell的作用

1、自动化运维

2、批量化的重复操作以及配合定时任务执行

3、有了脚本就可以减轻管理员的工作量

4、避免配置出错

5、提高处理批量文件的速度

1.3、shell脚本的构成

第一行:声明解释器(默认就是bash,可以不写)

格式:

#!/bin/bash

解释: 声明shell的解释器,这一行可以不写,默认的就是bash. 只有不是默认shell,其他的都要声明

第二行开始:可执行语句

linux 的命令都可以作为可执行语句,一行一行的往下写,一行就是一个可执行语句。

1.4、shell的执行方式

第一种:不给脚本执行权限的执行方式

sh:就是在当前的shell里生成一个子shell,运行结果不改变父shell 的环境

source:相当于点命令 (.) 他会改变当前shell的环境,也是真正的执行代码。

bash:就是在当前的shell里生成一个子shell,运行结果不改变父shell 的环境

例如/opt目录下写一个脚本文件test.sh,后缀名一般为.sh格式,约定俗成方便识别,脚本内容为

使用sh执行脚本文件,执行后仍在opt目录下

使用source执行脚本,执行后按照实际命令行进行切换目录

 

第二种:赋权方式

脚本调试完毕进行赋权执行,在实际生产中大多数选择这种方式。

对/opt/目录下的test.sh脚本文件进行赋权

chmod 777 /opt/test.sh

在当前opt目录下可以使用./执行脚本

[root@localhost opt]# ./test.sh 

 在其他目录下使用绝对路径执行脚本

1.5、重定向

标准输入

标准输出

标准错误输出

注:以下操作的 test.txt的内容从上之下依次执行,观察内容变化

 重定向输出: 

>>:标准输出的结果保存到文件,原有的内容的尾部追加内容,不会覆盖原有的内容。

      

>:标准输出的结果保存到指定的文件,而且会覆盖文件原有的内容。

将原有内容进行覆盖

2>:标准错误输出的结果,而且会覆盖文件原有的内容。(正确的输出结果没有)

2>>:标准错误输出的结果,原有的内容的尾部追加内容,不会覆盖原有的内容。(正确的输出结果没有)

&>:混合输出,既可以保存错误的输出又可以保存正确是输出,会覆盖文件原有的内容。

&>>:混合输出,既可以保存错误的输出又可以保存正确是输出,不会覆盖原有的内容。

重定向输入 :

< :从指定的文件获取数据,使用有一定的要求和规范,一般不用

二、变量

2.1、变量的作用

变量的作用:用来存放系统和用户需要的设定的参数(值),变量保存在内存中,调用的时候,直接到内存当中查找变量所在的内存地址。

2.2、变量的类型

int:整数型

string:字符串 声明字符串要用引号引起来" "

浮点:0.12

布尔:true false

注意事项:

1、不要使用系统的命令作为变量名。

2、不要使用中文。

3、不要使用特殊符合开头,可以使用_开头,不要使用数字开头。

4、变量名我们一般会使用对应的英文名称来使用。

5、变量名要保持前后一致,要有注释,提高代码的可读性。

2.3、双引号 单引号 反撇号

双引号就是弱引用,变量值就是变量值本身

a=10
echo "$a"

输出结果:10 

单引用就是强引用,变量的值不在是本身定义的值,保存自身的字符串形式

a=10
echo "$a"

输出结果:$a  

反撇号就是命令替换,把命令的执行结果传给变量,作为变量的值,先执行命令在给变量赋值

#将/opt目录内容展示
c=`ls -a /opt`
echo "$c"

输出结果: 

2.4、 自定义输入变量的值

使用read -p, -p指定提示符,提示符的内容包含在" "之间,内容可以为空,但双引号必须要有 

格式:read -p "提示信息:" a  

实例:

#!/bin/bash

read -p "输入第一个数字a:" a
read -p "输入第二个数字b:" b
c=$(($a+$b))
echo "a+b的结果:" $c

结果 :

2.5、 全局变量

全局变量特点:对整个系统生效,所有用户都可以使用,每个脚本的变量值,固定的

临时全局变量

export a=10 仅限于当前的shell脚本生效

全部全局变量,这种全局变量适应于不需要经常更改的值

shell均可使用通过修改/etc/profile

添加

export a=10

export b=10

2.6、排错方法

bash -n 脚本 查看语法错误

bash -x 脚本 会把每一步都打印出来,方便排错

echo "输出a、b、c的结果:"
a=$1
b=$2
c=$3
d=$($a+$b) 正确格式 d=$(($a+$b))        

结果:将报错行数展示出来

2.6、 环境变量

 环境变量:可以理解为特殊的全局变量,/etc/profile 配置文件

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#包含可执行文件的目录列表,可执行的命令,或程序的程序的默认路径

2.7、 位置变量

位置变量:又叫命令行参数,是在脚本的外面给脚本内部传值

$1 $2...$9 10以后要使用{} 例如:${10}.............

实例:脚本内容

echo "输出a、b、c的结果:"
a=$1
b=$2
c=$3
d=$(($a+$b))
echo "d="$d
echo "a="$a
echo "b="$b
echo "c=""$c"       

执行脚本: 1 2 3 分别对应脚本文件的 $1 $2 $3

2.8、 预定义变量

$* 和 $@:表示命令或者脚本需要处理的参数,二者的区别在于处理方式不同

$* 和 $@不加引号的时候,表现一致,都是把参数一个一个处理

$*加了引号,会把参数当成一个整体进行处理。

$# 全局变量,统计传递给脚本或者函数的参数个数

#!/bin/bash

echo "*的加引号"
function print_args {

        for arg in "$*"
        do
         echo "$arg"
        done
         echo "传了:$#" "个参数"
}
print_args "1" "2" "3"


echo "*的不加引号"
function print_args {

        for arg in $*
        do
         echo "$arg"
        done
}
print_args "1" "2" "3"


echo "@的不加引号"
function print_args {

        for arg in $@
        do
         echo "$arg"
        done
}
print_args "1" "2" "3"

echo "@的不加引号"
function print_args {

        for arg in "$@"
        do
         echo "$arg"
        done
}

结果:

$? true false 命令执行之后返回的状态码,只有0表示成功,所有非0都表示失败,返回上一次执行的命令的状态码。

实例:

#!/bin/bash
read -p "输入第一个数a:" a
read -p "输入第二个数b:" b
if [ $a -eq $b ]  ##判断a与b是否一致
then
echo $?
else
echo $?
fi

2.9、运算

 整数运算:常用 $(($a+$b))  、$[$a+$b] 、$(expr $a \* $b) 仅乘法为这个格式、let c= $a*$b

小数运算:bc是一个简易的系统自带的计算机程序。可以执行整数也可以计算小数。

c=$(echo "$a+$b" | bc)

也可以awk 'BEGIN{print 4.25*2.3}' 仅限于在命令行使用,无法在脚本文件使用

实例:

#!/bin/bash

read -p "输入第一个数字a:" a
read -p "输入第二个数字b:" b
c=$(echo" $a+$b"| bc)
echo "c的结果:" $c
d=$(expr $a \* $b)
echo "d的结果:" $d
e=$[$a+$b]
echo "e的结果:" $e

 结果:

i++ :先赋值在加1  i=$(($i+1))

++i :先加1,在赋值  

i--:先赋值在减1  i=$(($i-1))

--i:先减1,在赋值  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1811802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytest+requests+allure自动化测试接入Jenkins学习

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 最近在这整理知识&#xff0c;发现在pytest的知识文档缺少系统性&#xff0c;这里整理一下&…

MCU为什么上电不启动

相信很多朋友们都遇到过&#xff0c;自信满满的将程序下载到板子上&#xff0c;发现MCU居然没启动。 那这个现象可能有很多问题会导致&#xff0c;让我们来看看会有哪些原因。 1、BOOT引脚电平不对&#xff1a; 在GD32 MCU上&#xff0c;BOOT引脚决定了MCU的启动方式&#x…

zabbix监控深信服AD案例+自动发现虚拟服务和链路

文章目录 前言监控功能告警功能 环境准备操作步骤深信服AD开启SNMPSNMP V2SNMP V3 Zabbix导入模版Zabbix中添加深信服AD 前言 深信服AD&#xff0c;应用交付网关&#xff0c;是较为常见的应用发布、负载均衡设备&#xff0c;常用于网络出口。 本案例是通过zabbix的snmp监控深…

拥抱AI-图片学习中的卷积神经算法详解

一、定义 卷积神经算法&#xff08;Convolutional Neural Networks, CNN&#xff09;是深度学习领域中的一种重要算法&#xff0c;特别适用于处理图像相关的任务。以下是卷积神经算法的详细解释&#xff1a; 1. 基本概念 定义&#xff1a;卷积神经网络是一类包含卷积计算且具…

网络代理加速器:太阳HTTP的新一代解决方案(网络代理IP)

在当今数字化时代&#xff0c;网络速度与稳定性是企业和个人用户最为关注的重要问题之一。面对不稳定的网络连接&#xff0c;延迟高和速度慢等问题&#xff0c;传统的网络代理已经难以满足用户的需求。 为了解决这一问题&#xff0c;太阳HTTP推出了全新一代的网络代理加速器&a…

SQL Server 2016导入.bak文件到数据库里面步骤

1、打开SSMS管理器 选择数据库 右键 然后点击还原数据库。 2、选择设备 然后点击三个点 找到本地bak文件&#xff0c;然后点击确定 3、点击确定&#xff0c;会自动弹出来一个成功的提示。

消费增值模式引领业绩飙升与用户活跃

大家好&#xff0c;我是吴军&#xff0c;致力于为您揭示私域电商领域的独特魅力与机遇。 今日&#xff0c;我很高兴与大家分享一个激动人心的成功案例。我们的客户在短短一个月的时间里&#xff0c;业绩就飙升至上百万级别&#xff0c;其用户活跃度更是居高不下&#xff0c;日…

express+宝塔实现文件上传服务

文章目录 服务器部分开启存放文件的端口配置nginx该端口入口手动在/www/wwwroot/file目录下存放一张图片进行访问 express接口部分代码测试 服务器部分 开启存放文件的端口 我这里以83为例 先到对应的服务商开启端口&#xff0c;比如我这里是阿里云 测试&#xff0c;比如这里…

武汉凯迪正大—绝缘强度的测试设备 工频高压耐压交流试验仪 工频耐压试验机

武汉凯迪正大电气有限公司生产KDJS-8A全自动工频耐压试验系统&#xff08;10kVA全自动操作台&#xff09;&#xff0c;是根据国家行业试验标准而设计的试验设备&#xff0c;其安全可靠、功能强、使用方便、维护简单。主要用于对各种电器产品、电气元件、绝缘材料等进行规定电压…

vue3根据按钮切换更新echarts对应的数据

效果图 初始化注意 setOption的函数定义&#xff0c;option是指图表的配置项和数据&#xff0c;notMerge是指是否不跟之前设置的 option 进行合并。默认为 false。即表示合并。如果为 true&#xff0c;表示所有组件都会被删除&#xff0c;然后根据新option 创建所有新组件 //…

如何学习Django4?看这16堂课就够了

目录 写在前面 推荐图书 内容简介 作者简介 前言/序言 改编说明 推荐理由 写在后面 写在前面 本期博主给大家推荐一本关于Python Django4的图书&#xff08;2024年3月刚出版&#xff09;&#xff0c;感兴趣的小伙伴快来看看吧&#xff01; 推荐图书 《Python Django…

网络安全比赛-网络安全事件响应-Server2216(解析)

B-5:网络安全事件响应 任务环境说明: 服务器场景:Server2216(开放链接) 用户名:root密码:123456 1、黑客通过网络攻入本地服务器,通过特殊手段在系统中建立了多个异常进程,找出启动异常进程的脚本,并将其绝对路径作为Flag值提交; 2、黑客通过网络攻入本地服务器,…

72、AndroidStudio 导入项目Connect timed out错误解决

一、背景&#xff1a; 开发过程中难免会 clone 其他的项目&#xff0c;clone 或者下载成功之后。使用 android studio 打开项目时经常遇到 Connect timed out错误如图所示&#xff1a; 二、分析原因&#xff1a; 1、既然链接超时&#xff0c;肯定是 android studio 在运行…

python 魔术方法备忘录

python 魔术方法备忘录 网上收集了一些&#xff0c;列出了比较常用的&#xff0c;特别是第一张。 Python中的魔术方法&#xff08;Magic Methods&#xff09;&#xff0c;也被称为特殊方法&#xff08;Special Methods&#xff09;或双下划线方法&#xff08;Dunder Methods&a…

开放式耳机哪个品牌质量比较好?2024热门王炸品牌推荐!

开放式耳机市场繁杂&#xff0c;品质参差不齐。网红推荐、广告轰炸&#xff0c;让人眼花缭乱。但音频工程师告诉你&#xff0c;音质和舒适度才是关键。我根据多款开放式耳机测评结果&#xff0c;为大家提供选购指南&#xff0c;助你避开陷阱&#xff0c;找到心仪之选。 1、购买…

老版_zabbix安装与grafana可视化的安装(zabbix插件4.1.4)

grafana()的安装 查询、可视化和理解数据&#xff0c;并获取数据警报&#xff0c;无论数据存储在何处。在 Grafana&#xff0c;您可以通过美观、灵活的数据面板创建、探索和共享所有数据。 1. 网络下载安装 [itwisenode2 ]$ cd /opt/software/ #进入下载目录 #下载wegt安装命…

设计模式学习(二)工厂模式——工厂方法模式

设计模式学习&#xff08;二&#xff09;工厂模式——工厂方法模式 前言工厂方法模式简介示例优点缺点使用场景 前言 前一篇文章介绍了简单工厂模式&#xff0c;提到了简单工厂模式的缺点&#xff08;违反开闭原则&#xff0c;扩展困难&#xff09;&#xff0c;本文要介绍的工…

地面沉降数值模拟实践技术应用与案例分析教程

原文链接&#xff1a;地面沉降数值模拟实践技术应用与案例分析教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606571&idx4&sn426fd43d2f9a21e3b550c6b5da0be860&chksmfa8260cccdf5e9da7af49e796287d3756cc7052f3be17b01a0adac9c2caf2e1e6680bde…

爱普生SMD3225贴片晶振升级版TSX-3225

爱普生有一款外形尺寸3.2*2.5mm的无源贴片晶振&#xff0c;型号TSX-3225&#xff0c;也是非常直观的能从型号分辨其封装尺寸大小的&#xff0c;被广泛应用于便携式的无线传输设备&#xff0c;同时&#xff0c;这也是一款非常成熟的产品&#xff0c;毕竟SMD3225封装是目前市场主…

量产导入 | KGD 是什么?

文章目录 KGD 是什么&#xff1f;认识KGD定义、功能与应用实例【白话文解析】Known Good「Die」何谓良品裸晶粒 &#xff08;KGD/KGD Die&#xff09;&#xff1f;解读KGD产业应用为什么大家纷纷采用KGD&#xff1f; 一窥KGD与芯片封测大趋势 KGD 是什么&#xff1f;认识KGD定义…