Shell脚本01

一、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/bashread -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/bashecho "*的加引号"
function print_args {for arg in "$*"doecho "$arg"doneecho "传了:$#" "个参数"
}
print_args "1" "2" "3"echo "*的不加引号"
function print_args {for arg in $*doecho "$arg"done
}
print_args "1" "2" "3"echo "@的不加引号"
function print_args {for arg in $@doecho "$arg"done
}
print_args "1" "2" "3"echo "@的不加引号"
function print_args {for arg in "$@"doecho "$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/bashread -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.rhkb.cn/news/346846.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重邮计算机网络803-(1)概述

目录 一.计算机网络向用户提供的最重要的功能 二.互联网概述 1.网络的网络 2.计算机网络的概念 3. 互联网发展的三个阶段 4.制订互联网的正式标准要经过以下的四个阶段 5.互联网的组成&#xff08;功能&#xff09; 6.互联网功能 7.互联网的组成&#xff08;物理&…

物联网TCP、UDP、CoAP、LwM2M、MQTT协议简单对比

一、前言 目前物联网行业有TCP、UDP、CoAP、LwM2M、MQTT、Modbus系列、JT808、HTTP、TLINK、ISAPI等协议&#xff0c;本文先对其中的几款协议进行介绍。具体关系见下图&#xff1a; 传输层协议&#xff1a;TCP、UDP&#xff1b;应用层协议&#xff1a;CoAP、LwM2M、MQTT、Modbu…

Go微服务: 关于消息队列的选择和分类以及使用场景

消息队列概述 在分布式系统和微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是一个核心组件&#xff0c;用于在不同的应用程序或服务之间异步传递消息在 Go 语言中&#xff0c;有多种实现消息队列的方式&#xff0c;包括使用开源的消息队列服务&…

OSI七层网络参考模型

一、物理层 我们要发送出去的数据在计算机里只不过是无数的0和1&#xff0c;0或1就叫做比特&#xff0c;物理层就是把这些比特用不同的媒介传输出去&#xff0c;可以用电、光或者其他形式的电磁波来表示和传输信号&#xff0c;数据从网络接口出去以后&#xff0c;会经过不同的网…

一文带你入门 - Qt绘图QPainter

QPaintEvent绘图事件: QPaintEvent 是 Qt 框架中一个重要的事件类&#xff0c;专门用于处理绘图事件。当 Qt 视图组件需要重绘自己的一部分时&#xff0c;就会产生 QPaintEvent 事件。这通常发生在以下几种情况&#xff1a; 1. 窗口第一次显示时&#xff1a;当窗口或控件第一次…

计算机组成原理(二)

ACC&#xff08;累加器&#xff09;&#xff1a; 用于存储高位部分 MQ&#xff08;乘数-商寄存器&#xff09;&#xff1a; 用于存储低位部分。在除法中保存商&#xff0c;在乘法中保存乘数&#xff0c;所以也叫乘商寄存器 左移 8 位&#xff08;相当于乘以 256&#xff09…

AI产品经理的转行之路,如何迈向年薪80w的职业高峰?

前言 在当今科技日新月异的时代&#xff0c;AI产品经理作为一个炙手可热的职业&#xff0c;吸引了众多向往高薪与前沿领域结合的求职者的目光。年薪80万的诱惑力无疑是巨大的&#xff0c;但不少自学中的朋友发现&#xff0c;即便涉猎广泛的产品知识&#xff0c;想要顺利转型成…

掌握Python的全方位教程,2024年最新版本,初学者必备指南

哈喽&#xff0c;大家好&#xff01;热烈欢迎你迈出成为python开发者的第一步。我想这一定非常激动人心&#xff0c;对吧&#xff1f;无论你是刚刚开始学习编程&#xff0c;还是曾经用过其他语言有一定的编程经验&#xff0c;本书中课程将帮助你加速实现你学习python的目标。作…

2024第十六届亚洲水技术展览会Aquatech China

Aquatech China 2024第十六届亚洲水技术展览会 专注水行业覆盖全领域—荷兰阿姆斯特丹水展中国展 2024.12.11-13 上海新国际博览中心 展会背景 Aquatech品牌创立于1968年。作为水处理行业历史悠久 的展览会&#xff0c;荷兰国际水处理展览会(Aquatech Amsterdam)至今已有近55…

物联网8大协议介绍及对比

一.物联网主流协议介绍 1.MQTT 协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;即消息队列遥测传输。 MQTT 协议最初是在 1999 年由 IBM 公司开发的&#xff0c;用于将石油管道上的传感器与卫星相连接。2014 年正式成为 OASIS 开放标准。 MQTT 使用…

车圈内卷的真相:技术创新与长期主义的存亡之战

引言 随着中国汽车市场的不断发展&#xff0c;行业竞争也日趋激烈。近期&#xff0c;在2024年6月6日举行的中国汽车重庆论坛上&#xff0c;多位汽车界大佬就“内卷”问题展开了激烈讨论。本文将详细分析这些讨论内容&#xff0c;揭示汽车行业内卷的真实情况及其背后的深层次原…

怎么选海外仓操作管理系统才能满足amazon电商需求?考虑好这些,做好FBA并不难

对于跨境电商领域来说&#xff0c;amazon一定是绕不过去的一个平台。不过想做好这个平台的业务并不容易&#xff0c;一方面是现在竞争确实越来越大&#xff0c;另一个是现在电商平台对海外仓业务水平的要求也越来越高。 尤其是对一些中小型的海外仓来说&#xff0c;如何高效、…

Autoware 定位之EKF 滤波定位(四)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

新火种AI|摊上事儿了!13名OpenAI与谷歌员工联合发声:AI失控可能导致人类灭绝...

作者&#xff1a;小岩 编辑&#xff1a;彩云 2024年&#xff0c;OpenAI的CEO Sam Altman就没有清闲过&#xff0c;他似乎一直走在解决麻烦的路上。最近&#xff0c;他的麻烦又来了。 当地时间6月4日&#xff0c;13位来自OpenAI和Google Deep Mind的现任及前任员工联合发布了…

几首音乐怎么合成一首?值得推荐的四个几首音乐合成一首的方法

几首音乐怎么合成一首&#xff1f;合成几首音乐成一首新的作品是一项创造性而充满挑战的任务。通过将不同的音乐元素融合在一起&#xff0c;可以创造出独特的音乐体验&#xff0c;展示多样化的音乐风格和个性。将多首音乐合成一首可以创造出独特的音乐体验&#xff0c;融合不同…

PyTorch 维度变换-Tensor基本操作

以如下 tensor a 为例&#xff0c;展示常用的维度变换操作 >>> a torch.rand(4,3,28,28) >>> a.shape torch.Size([4, 3, 28, 28])view / reshape 两者功能完全相同: a.view(shape) >>> a.view(4,3,28*28) ## a.view(4,3,28,28) 可恢复squeeze…

二叉树左右树交换

leetcode 226题 翻转二叉树 题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3]…

计划任务 之 一次性的计划任务

计划任务 作用:定时自动完成特定的工作 计划任务的分类&#xff1a; &#xff08;1&#xff09;一次性的计划任务 例如下周三对系统的重要文件备份一次 &#xff08;2&#xff09;周期性重复计划任务 例如每天晚上12&#xff1a;00备份一次 一次性的任务计划&#xff1a…

linux的du命令简介

文章目录 linux的du命令简介du命令详解查看某个目录下 文件个数 linux的du命令简介 du命令是linux系统里的文件大小查看的命令。 du命令的应用场景十分广泛&#xff1a; 需要查看单个目录里面多个文件总大小。 需要查看目录中每个文件的大小以及每个子文件夹中文件的大小。 查…

opencv_核心操作

图像基本操作 访问和修改像素值 import numpy as np import cv2 img cv2.imread(c:/Users/HP/Downloads/basketball.png) h,w,c img.shape #图像大小 print(h,w,c)### 841 1494 3# 通过行和列坐标访问像素值 img[100,100]### 231 ### array([231, 140, 146], dtypeuint8)# …