shell编脚本概述和变量解释

news2025/1/10 1:34:10

shell的基本概述和规范

shell面向的对象

面向过程语言

(开发的时候,需要一步一步的执行)

  • 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理

  • 问题规模小,可以步骤化,按部就班处理

  • 以指令为中心,数据服务于指令

  • c,shell

面向对象语言(开发的时候将任务当作一个整体)

  • 将编程看成是一个事物,对外界来说,事物是直接使用的,不用关心事物内部的情况。而编程就是设置事物能够完成功能.

  • 一种认识世界、分析世界的方法论。将万事万物抽象为各种对象

  • 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合

  • 对象是类的具象,是一个实体

  • 问题规模大,复杂系统

  • 以数据为中心,指令服务于数据

  • java,python,golang等 云 go k8个字母s 平台

shell的概述

是将人类使用的高级语言转换成二进制,也可以将二进制翻译成高级语言。

人类写了个命令集合,用bash(shell)去翻译给硬件执行。

shell脚本的概念

  • 将要执行的命令按顺序保存到一个文本文件

  • 给该文件可执行权限

  • 可结合各种shell控制语句以完成更复杂的操作

shell脚本应用场景

  • 重复性操作

  • 交互性任务

  • 批量事务处理

  • 服务运行状态监控

  • 定时任务执行

shell编程规范

编写脚本代码

  • 使用vim文本编辑器

  • 每行一条linux命令,按执行顺序一次编写

shell脚本的组成(脚本名最好以.sh结尾,shell语法会高亮)

1.脚本申明(解释器):第一行开头“#! /bin/bash”。表示此行以下的代码语句是由shell语言编写

2.注释信息:以#开头的语句表示为注释信息。

3.可执行语句:比如echo命令用于输出“ ”之间的字符串。

shell执行脚本

1.直接调用shell解释器加上脚本的名字,bash + 脚本名 。不需要加权限

2.路径/脚本 路径:绝对路径或相对路径,而且需要x权限(加上执行权限:chmod +x 文件名)

3.source(.) 加脚本名字(不建议使用,会修改当前bash环境)

如果你想让脚本全局运行或者可以补全,要将脚本放入$PATH路径下

使用1和2执行脚本,是会新开一个bash环境去执行,不影响当前bash环境,而如果使用3去执行脚本,会直接在当前环境执行。

脚本执行逻辑和执行方式

脚本执行逻辑

1.顺序执行:程序按从上到下顺序执行

2.选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行。

3.循环执行:程序执行过程中需要重复执行多次某段语句。

脚本错误及调试

1.命令错误:不会影响接下来的命令执行,但是本条错误的命令不执行。

bash -x 脚本:模拟执行后,发现错误

2.语法错误:直接导致脚本无法运行。

bash -n 脚本:检查语法错误(在哪一行错了)(出错的行数不一定是正确的,上下左右)

3.逻辑错误:只能自己去筛查

shell脚本(安全选项)

set -e:在脚本里加,一旦出错立即停止

set -u:变量不存在不让执行

变量:如:dir =/opt

重定向与管道操作

--stdin管道操作

将管道符号“ | ”左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道

管道符“|”

将第一个命令的结果当作后一个命令的处理对象。

pa aux |wc -l
echo "abc123" |passwd --stdin zhangsan

重定向(标准输出、错误输出、标准输入)

默认电脑数据的输出方向是屏幕

1.标准输出:

你发了一条指令给电脑操作, 电脑会回复结果给你,结果是一定显示在屏幕上,称为标准输出

2.错误输出:

如果电脑没有正确回复,称为错误输出

3.标准输入:

我们通过 键盘 标 扫描仪 话简 等设备输入给电脑的指令

交互式硬件设备

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

重新定向操作:改变输出方向

1.输出到别的终端设备(tty查看本机名)

2.输入到文件中

“ > 覆盖”

“ >> 添加”

类型操作符用途
重新定向输入<从指定文件读取数据
重新定向输出>将标准输出结果保存到指定的文件,并且覆盖原有文件
>>将标准输出结果添加到指定文件的末尾,不覆盖原有内容
标准错误输出2>将错误信息保存到指定文件,并且覆盖原有的文件
2>>将错误信息追加到指定文件尾部,不覆盖原有内容
混合输出&>将标准输出,标准错误保存到同一文件中
2>&1将标准错误输出重新定向到标准输出
useradd zhangsan  #创建一个用户
echo"123456" > zhangsan.txt #把密码输出到文件
​
passwd --stdin zhangsan < zhangsan.txt  #从文件里读取密码
​
命令输错了会报错,当不想看到报错时,可以把它藏到文件里显示
如:li 2> aaa.txt
    cat查看就可以查看到报错了
   li 2>> aaa.txt   #同上性质,只是会添加不会覆盖
   la &>> aaa.txt   #同样>>,只会添加不会覆盖
  
   ll &> aaa.txt
   ll > aaa.txt  2>&1   #2>&1效果和&>一样
​

shell脚本变量

变量的作用:用来存放系统和用户需要使用的特定参数

变量:值可以变化的

常量:值不可以变化

变量名:使用固定的名称,由系统预设或用户定义

变量值:能够根据用户设置、系统环境的变化而变化

shell不分数据类型(统一将所有的数据类型看作字符串)

变量的类型

1.自定义的变量:由用户自己定义、修改和使用

2.预定义变量 :bash中内置的一类变量

3.环境变量 :由系统维护,用于设置工作环境

env可以看到所有环境的变量

4.只读变量:常量

只可以读不可以改

5.位置变量:通过命令行给脚本程序传递参数

自定义变量

要求方式
设置变量变量名=变量值 两边没有空格
调用变量echo $变量名
删除变量unset 变量名
重新定义变量变量名=变量值
追加变量值变量名+=变量值

命名要求

  • 区分大小写

  • 不能使程序中的保留字和内置变量: 如: if,for,hostname 命令 a=

  • 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线“ - ”,和主机名相反

  • 不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH

  • 大驼峰StudentFirstName

  • 小峰studentFirstName

  • 下划线 student_name

变量的特殊符号

${}:定义了变量名的范围

“ ” :变量在双引号里可以识别,弱引用

‘ ’ :变量在单引号里不被识别,强引用

``:反撇号,代表调用命令执行的结果,同理别名。将一串命令重新定义,效果等于$( )

name=hyh   #变量名=变量值
age=233    #变量名=变量值
​
echo "$name $age"
hyh 233
​
echo '$name $age'    #单引号内$视为普通字符
$name $age
​
echo $(ls /opt)   
123 rh
                  #反撇号和括号使用结果都一样,提取命令执行后的结果
echo 'ls /opt'   
123 rh
​

变量追加值

格式:title=cto

title+=ylc #变量名+=追加值

[root@localhost opt]# hyh=原神
[root@localhost opt]# hyh+=启动
[root@localhost opt]# echo $hyh
原神启动
​
修改环境变量:
PATH+=:/data
​
vim /etc/profile
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/data"

查看变量的值:

echo $变量名

name=hyh   #变量名=变量值
age=233    #变量名=变量值
​
echo  $name$age
hyh233
                 #输出多个变量的值加空格和不加空格的区别
echo $name $age
hyh 233
#如果变量名后跟了别的字符传,记得把变量名加上大括号区别开
如:
echo ${name}$age
hyh233
echo ${name} $age
hyh 233
​
echo ${name}lisi
hyhlisi
echo ${name} lisi
hyh lisi

变量作用范围

  • 默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用

  • 可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用

设置变量的作用范围(临时的)

格式1:export 变量名

格式2:export 变量名=变量值 (指定该变量在任何环境下都能使用)

  • 可以使用pstree 查看shell的环境

  • 输入bash进入子shell环境

  • ctrl+D组合键或者输入exit 命令,退出子shell环境

整数的运算

expr只能进行整数的运算 格式:expr 变量1 运算符 变量2[运算符 变量3] 运算符 : 加法 + 减法 - 乘法 \ * 除法 / 取余 %

let  sum=1+2
​
echo $sum 
​
3
let var=算术表达式
let sum=1+2
sum=1+2

$((var=算术表达式))和上面等价
((sum=1+2))
echo $sum
 
var= S[算术表达式]
​
var=$(expr argl arg2 arg3 ...)
​
var= expr argl arg2 arg3...'
​
echo'算术表达式’ |bc
​
​
sum=$[ ] 计算

[root@test1 ~]# vim ji.sh
#!/bin/bash
read -p "请输入第一个整数" num1
read -p "请输入第二个整数" num2
#执行加法运算
sum=`expr $num1 + $num2`
echo "运算结果为$sum"
[root@test1 ~]# chmod +x ji.sh
[root@test1 ~]# ./ji.sh 
请输入第一个整数6
请输入第二个整数9
运算结果为15
​

环境变量

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

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

  • 变量USER表示用户名称,HOME表示用户的宿主目录,LANG表示语言和字符集,PWD表示当前所在的工作目录

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

/etc/profile

#只要开机或者用户登录就下载里面的配置文件

/etc/bashrc

#每次用户登录的时候也会加载里面的配置,主要是加载功能和别名用的

~/.bashrc

#当前用户每切换一次shell环境都会自动执行,会加载/etc/bashrc

~/bash_profile

#每次用户登录的时候也会加载里面的配置,主要是加载功能和别名用。

修改环境变量:

PATH+=:/data   #将/data目录添加到搜索路径
​
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/data
​
export PATH=:/data  #输出全局变量

环境变量的全局配置文件为/etc/profile,在此文件中定义的变量作用于所有用户,在每次电脑开机时都会加载这个文件。每个用户还有自己的独立配置文(~/.bash_profile)。可以用来长期变更或设置某个环境变量

预定义变量(前面加echo显示)

bash 帮你定义好了 拿来用就可以了

$?:表示上一条命令执行后的返回状态,返回值0表示执行正确,非0值则表示出现异常。

$#:表示命令行中位置参数的个数

$0:表示当前执行的脚本或程序的名称

$$:表示当前bash的pid

$!:后台任务最后一个id

$*:代表返回所有参数(所有参数当成一个整体返回)

$@:代表返回所有参数(每个参数是独立的个体)

位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

#!/bin/bash
echo "$1"            位置1
echo "$2"            位置2
echo "${10}"         位置10
echo "$10"           位置1和0
echo "$*"            将所有项当成一个值
echo "$@"            所有项
echo "$0"            脚本自身
echo "$#"            后面参数的个数
​
​
[root@test1 ~]# ./1.sh {1..10}
1 
2
10
10
1 2 3 4 5 6 7 8 9 10

变量的命令

bash

相当于一个多开的桌面

显示当前bash的pid号:echo $$

readonly

命令设置只读变量(无法修改无法删除)

product=benet
readonly product       #设置为只读变量
​
echo $product
product=accp           #只读变量不可以被重新赋值
​
unset product          #只读变量不可以被删除,unset命令用于删除变量
​

read命令获取输入内容

方法一: read -p "提示信息" 变量名 echo $变量名

方法二: echo -n “提示信息” read变量名 echo $变量名

read -p "你在干什么?" you     #定义you这个变量名的变量值
          提示信息    变量名
你在干什么? 玩原神
echo $    you
玩原神     #变量值
         

脚本示例:

脚本搭建yum仓库

#!/bin/bash
mount /dev/sr0  /mnt
cd /etc/yum.repos.d
mkdir  bak
mv *.repo  bak
​
echo "
[hyh]
name=hyh
baseurl=file:///mnt
gpgcheck=0
"  >  hyh.repo
​
yum clean all   &>/dev/null  #显示的内容放入垃圾箱
yum makecache   &>/dev/null  #显示的内容放入垃圾箱

建立一个简单的计算器脚本

注意一定要用英文符号

建立一个显示本机配置属性脚本

建立自动分区的脚本

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

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

相关文章

力扣每日一题-美化数组的最少删除数-2023.11.21

力扣每日一题&#xff1a;美化数组的最少删除数 开篇 今天的力扣每日一题居然写出来了&#xff0c;好开心&#xff0c;迫不及待地把题目分享出来&#xff0c;希望你也能把它狠狠拿下。 题目链接: 2216.美化数组的最少删除数 题目描述 代码思路 创建一个list集合来保存数组&a…

【机器学习】036_权重衰退

一、范数 定义&#xff1a;向量的范数表示一个向量有多大&#xff08;分量的大小&#xff09; L1范数&#xff1a; 即向量元素绝对值之和&#xff0c;用符号 ‖ v ‖ 1 表示。 公式&#xff1a; L2范数&#xff1a; 即向量的模&#xff0c;向量各元素绝对值的平方之和再…

对一个Series序列内的元素逐个扩展同一聚合操作一个序列中共有m个元素,从指定的第n个元素开始,对前i元素进行聚合计算Series.expanding()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 一个序列中共有m个元素 从指定的第n个元素开始 对前i元素进行聚合计算 其中&#xff1a;n < i < m 聚合计算&#xff1a;求最大、平均值等 Series.expanding(n).max() Series.expanding(…

重磅,瑞士药监局 发布 EU GMP附录1《无菌药品生产》官方解读!

近日&#xff0c;瑞士药监局发布了EU GMP附录1《无菌药品生产》&#xff08;同时也是PIC/S和WHO GMP附录1&#xff09;的解读文件&#xff0c;该文件侧重于新版EU、PIC/S和WHO GMP附录1的一些最重要的变化&#xff0c;也涵盖了长期以来反复引起问题的方面。反映了检查员对这些主…

HALCON中的运算符和控制流算子

HALCON中的运算符 Haclon中的运算符包括算术运算符、逻辑运算符、关系运算符&#xff0c;其功能和用法与C语言相类似。但HALCON中每个运算符都有一个算子相对应&#xff0c;如表2-2所示。 HALCON中的控制流算子 HALCON通过控制流算子来控制程序的走向&#xff0c;包括条件选…

MQTT协议消息代理服务远程连接

目录 1. Linux 搭建 Mosquitto 2. Linux 安装Cpolar 3. 创建MQTT服务公网连接地址 4. 客户端远程连接MQTT服务 5. 代码调用MQTT服务 6. 固定连接TCP公网地址 7. 固定地址连接测试 Mosquitto是一个开源的消息代理&#xff0c;它实现了MQTT协议版本3.1和3.1.1。它可以在不…

在浏览器中使用WebRTC获取用户IP地址

本文翻译自 Discover WebRTC: Obtain User IP Addresses in the Browser&#xff0c;作者&#xff1a;Zack&#xff0c; 略有删改。 如果需要在程序中获取当前用户的IP&#xff0c;通常手段都是需要使用服务器。但现在借助WebRTC的强大功能&#xff0c;我们可以直接在浏览器客户…

你知道如何实现游戏中的透视效果吗?

引言 游戏中的透视效果可以合理运用CtrlCV实现。 不知道大家有没有这样一段经历&#xff1a;在做Cocos项目时需要一些特定的Shader去做一些特定的效果&#xff0c;例如透视、高光、滤镜等等&#xff0c;想自己写吧&#xff0c;不怎么会啊&#xff0c;网上又找不到&#xff0c…

Gensim库——文本处理和主题建模的强大工具

在信息时代&#xff0c;海量的文本数据不断地涌现。如何从这如山如海的文本中提取有意义的信息&#xff0c;成为了一项关键任务。Python语言提供了许多优秀的库和工具来处理文本数据&#xff0c;其中一款备受推崇的工具就是Gensim库。Gensim是一个开源的Python库&#xff0c;它…

ESP32 MicroPython AI摄像头应用⑩

ESP32 MicroPython AI摄像头应用⑩ 1、AI摄像头应用2、移动检测&#xff08;LCD显示&#xff09;3、实验内容3、参考代码4、实验结果 1、AI摄像头应用 我们小车MCU支持AI(人工智能)加速&#xff0c;可以用于加速神经网络计算和信号处理等工作的向量指令 (vector instructions)…

Haclon简介及数据类型

Haclon简介 HALCON是由德国MVtec公司开发的机器视觉算法包&#xff0c;它由一千多个各自独立的函数&#xff08;算子&#xff09;构成&#xff0c;其中除了包含各类滤波、色彩以及几何、数学转换、形态学计算分析、图像校正&#xff0c;目标分类辨识、形状搜寻等基本的图像处理…

【SEO学习】专家优化

创建、编辑和推广独特的高质量内容既困难又耗时。如果你真的认真对待搜索引擎优化&#xff0c;但却没有取得预期效果&#xff0c;那么最好聘请一位搜索引擎优化专家。 搜索引擎优化专家会执行以下任务&#xff1a; 代码验证和清理 - 确保代码对搜索引擎友好并符合标准。网站结…

CentOS7安装Docker遇到的问题笔记

笔记/朱季谦 以下是笔者本人学习搭建docker过程当中记录的一些实践笔记&#xff0c;过程当中也遇到了一些坑&#xff0c;但都解决了&#xff0c;就此记录&#xff0c;留作以后再次搭建时可以直接参考。 一、首先&#xff0c;先检查CentOS版本&#xff0c;保证在CentOS7版本以…

Linux:详解(yum的使用、vim编辑器命令集合以及gcc/g++编译器的使用)

Linux 软件包管理器 yum 什么是软件包&#xff1a; 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通…

【opencv】debug报错HEAP CORRUPTION DETECTED

运行至第一句涉及矩阵运算的代码&#xff08;如cv::multiply&#xff09;时报错 HEAP CORRUPTION DETECTED: after Normal block (#45034) at 0x000001BDC586F0E0. CRT detected that the application wrote to memory after end of heap buffer.release下不会报错&#xff0…

探索人工智能领域——每日30个名词详解【day4】

目录 前言 正文 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da;。 &#x1f4e3;如需转载&#xff0c;请事先与我联系以…

(免费领源码)python#flask#mysql旅游数据可视化81319-计算机毕业设计项目选题推荐

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对旅游数据可视化等问题&#xff0c;对旅游数据…

vscode设置前进、后退快捷键

前言 在我们使用vscode编写程序时&#xff0c;经常需要在不同的文件之间跳来跳去&#xff0c;如果只是依靠个人记忆去操作会显得非常不方便。本文介绍如何设置vscode的前进、后退快捷键。 1 vscode设置前进、后退快捷键 点击“设置”图标&#xff0c;然后点击“键盘快捷方式…

注解案例:山寨Junit与山寨JPA

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 上篇讲了什么是注解&am…

一文讲明 网络调试助手的基本使用 NetAssist

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 &#x1f3f7;️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…