shell编程规范与变量

目录

一、shell的作用和规范

1.shell的作用

2.shell的执行顺序

3.shell的格式

4.执行shell脚本

1.直接调用shell解释器加上脚本的名字

2.路径加脚本名          绝对路径或相对路径        脚本文件需要有执行权限

3.直接运行

4.其他执行

5.执行环境

二、脚本的错误方式和检查语句

1.命令错误

2.语法错误

3.逻辑错误

4.检查语句

三、重定向与shell脚本变量

1.重定向

2.shell变量

1.变量

2.变量的类型

3.命名要求

4.特殊符号

5.预定义变量(详解)

四、脚本语句

1.read -p     从键盘输入的内容变成变量

2.变量作用范围

3.整数的运算

4.管道符

5.随机数生成器变量

6.编写脚本

总结:本章主要介绍shell脚本的基础知识以及部分基础脚本


一、shell的作用和规范

1.shell的作用

将高级语言翻译成二进制,也可以将二进制翻译成高级语言

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

2.shell的执行顺序

1.顺序执行

2.选择执行

3.循环执行

3.shell的格式

1.#!/bin/bash               代表声明解释器,使用什么解释器(shell)

2.注释信息:以#开头的代表注释信息

3.可执行语句

4.执行shell脚本
1.直接调用shell解释器加上脚本的名字

bash [脚本名]                             不需要脚本文件有执行权限

2.路径加脚本名          绝对路径或相对路径        脚本文件需要有执行权限

./ [脚本名]

3.直接运行

直接运行需要加入到$PATH中(全局运行和补全)

4.其他执行

source和.也可以执行

5.执行环境

source 和 . 执行脚本会改变当前环境(进程)

bash 和 ./ 不会改变当前环境会生成一个新环境(进程)

 6.查看本机的shell信息

cat /etc/shells

二、脚本的错误方式和检查语句

1.命令错误

不会影响接下来的命令执行,但本条命令不执行

2.语法错误

直接影响脚本无法正常运行

3.逻辑错误

可以正常运行但最终结果不是本来的结果

4.检查语句

bash -x [脚本文件名]         执行脚本并排查错误

bash -n [脚本文件名]         检查语法错误但行数不一定准确

set -e 一旦出错立即停止   用法:写入脚本文件中

set -u 变量不存在不执行   用法:写入脚本文件中

三、重定向与shell脚本变量

1.重定向

重定向就是改变电脑数据的输出方向

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

写入指令让电脑执行,电脑打印结果在屏幕上,称为标准输出如果电脑未打印出正确的结果称为错误输出

通过键盘,鼠标,扫描仪,话筒,等设备输入给电脑的指令称为标准输入

改变输出方向

1.输出到别的终端上

先使用 tty 命令查看终端信息

再使用 ls > /dev/pts/0

2.输入到文件中

ls > test 

重定向输入       <        从指定文件读取数据,不从键盘输入

重定向输出       >        将输出结果保存到指定的文件(覆盖原有内容)

                        >>       将输出结果追加到指定的文件尾部

标准错误输出   2>       将错误信息保存到指定的文件(覆盖原有内容)

                        2>>     将错误信息追加到指定的文件中

混合输出           &>      将标准输出,标准错误输出的内容保存到同一个文件中

2.shell变量
1.变量

变量:值可以变化

常量:值不可以变化

shell不分数据类型,所有的数据类型都是字符串

设置变量

变量名=变量值           两边没有空格

调用变量

echo $变量名

删除变量

unset 变量名

重新定义变量

变量名=变量值

追加变量值

变量名+=变量值

2.变量的类型

1自定义的变量

2预定义变量($?,$$,$*,$@这些是shell中自带的)

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

4只读变量(只可以读不可以改)

变量值不允许修改(重新赋值)的情况

无法使用unset删除

最快方法重启

name=zf15

readonly name

echo $name

unset name

echo $name 

 name=zf

5位置变量($1...$n)

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

vim 1.sh 

#!/bin/bash
echo "$1"            位置1
echo "$2"            位置2
echo "${10}"         位置10
echo "$10"           位置1和0
echo "$*"            将所有项当成一个值
echo "$@"            所有项
echo "$0"            脚本自身
echo "$#"            后面参数的个数

./1.sh {1..10}

3.命名要求

1区分大小写

2不能使用程序中的保留字和内置变量

3只能用字母,数字及下划线且不能以数字开头,不支持短横线"-"

4不要使用内置的变量,使用英文尽量使用词义

5大驼峰 StudentFirstName

6小驼峰 studentFirstName

7下划线 student_name

4.特殊符号

${}       定义变量名的范围

" "        变量在双引号中可以识别(弱引用)

' '         变量在单引号中不被识别(强引用)

` `         反撇号代表引用命令执行的结果效果等于$()

5.预定义变量(详解)

$?    代表上一次命令的执行结果为0代表正确,非0代表错误

$0    代表脚本的文件名    如 bash $0 代表再执行一次本脚本如果写入脚本就会一直执行无限循环

$$    代表当前bash的pid号

$#    代表位置参数的总个数

$*     代表返回所有参数并且所有参数当成一个整体返回

$@   代表返回所有参数并且所有参数是独立的个体返回

四、脚本语句

1.read -p     从键盘输入的内容变成变量

read -p "现在的时间是:"  time

echo $time

 vim 1.sh

#!/bin/bash
echo -n "请输入你的姓名:"
read info
echo 你的姓名是:$info

bash 1.sh 

2.变量作用范围

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

可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用

格式1:export 变量名

格式2:export 变量名=变量值

可以使用pstree 查看shell的环境

输入bash进入子shell

ctrl+D组合exit 退出子shell

abc=123
echo $abc
bash
echo $abc
exit
echo $abc
export abc=123
bash
echo $abc

3.整数的运算

expr只能进行整数的运算

格式:  expr  变量1   运算符   变量2

运算符:

加法                  +

减法                  -

乘法                  \*

除法                   /

取余                  %

expr 1+2

expr 1 + 2

a=20

b=30

expr $a + $b

expr $a - $b

expr $a \* $b

expr $b / $a

expr $b % $a

 expr 1 + 2 \* 3 

expr 2 \* $[ 3 + 1 ] 

a=1

b=2

let c=a+b

echo $c

i=1

let i++

echo $i

i=1;let i++;echo $i

i=100;let ++i;echo $i

i=100;let j=i++;echo $i $j

i=100;let j=++i;echo $i $j

i++ 是先赋值给j后再加     ++i是加后再赋值

4.管道符

管道符 |

将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用

ls /opt |wc

grep "/bin/bash$" /etc/passwd

grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}'

5.随机数生成器变量

$RANDOM  取值范围:0-32767

echo $[RANDOM%34+1]           生成随机数范围在35以内

echo -e "\E[1;30mhello\E[0m"    生成灰色hello

echo -e "\E[1;$[RANDOM%7+31]mhello\E[0m"      生成随机颜色的hello

echo $(expr $RANDOM % 33 + 1)         生成随机数范围在34以内

6.编写脚本

vim xinxi.sh

#!/bin/bash

echo "请输入你的姓名"

read num1

echo "你的姓名是$num1"

bash xinm.sh

chmod +x xinm.sh

./xinm.sh

vim 3.sh

#!/bin/bash
read -p "请输入第一个整数:" num1
read -p "请输入第二个整数:" num2
sum=`expr $num1 + $num2`
echo "运算结果为:$sum"
bash 3.sh

vim system.sh

#!/bin/bash
ip=`ifconfig ens33|grep netmask|tr -s " " |cut -d " " -f3`
cpu=`lscpu |grep 型号名称|cut -d":" -f2|tr -s " "`
mem=`free -h|grep  Mem|tr -s " " |cut -d " " -f2`
disk=`lsblk |grep disk|tr -s " " |cut -d" " -f4`

echo "--------------------- systeminfo----------------------"
echo  "你的ip地址是:  ${ip}                                "
echo  "你的主机名是:  $(hostname)                          "
echo  "你的系统版本是: $(cat /etc/redhat-release)          " 
echo  "你的cpu型号是: $cpu                                 "
echo  "你的内存大小是: $mem                                "
echo  "你的磁盘大小是: $disk                               "
echo "------------------------------------------------------"

bash system.sh

总结:本章主要介绍shell脚本的基础知识以及部分基础脚本

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

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

相关文章

Java学习day14:权限修饰符,集合(知识点+例题详解)

声明&#xff1a;该专栏本人重新过一遍java知识点时候的笔记汇总&#xff0c;主要是每天的知识点题解&#xff0c;算是让自己巩固复习&#xff0c;也希望能给初学的朋友们一点帮助&#xff0c;大佬们不喜勿喷(抱拳了老铁&#xff01;) 往期回顾 Java学习day13&#xff1a;泛型&…

Ajax基础(应用场景|jquery实现Ajax|注意事项)

文章目录 一、Ajax简介二、基于jquery实现Ajax三、使用Ajax注意的问题1.Ajax不要与form表单同时提交2.后端响应格式问题3、使用了Ajax作为请求后的注意事项 一、Ajax简介 AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻译成中文就是“异步Javascript和XML”。…

Python爬虫技术系列-03/4flask结合requests测试静态页面和动态页面抓取

python构建web服务 flask内容参考:Flask框架入门教程&#xff08;非常详细&#xff09; flask安装与运行测试 安装flask pip install flask创建一个webapp.py文件&#xff0c;内容如下 from flask import Flask# 用当前脚本名称实例化Flask对象&#xff0c;方便flask从该脚…

OpenHarmony Axios组件使用过程中,Api9不适配问题

大家好&#xff0c;我是【八戒&#xff0c;你又涨价了哎】 以下是我个人在学习OpenHarmony过程中的分享&#xff0c;请大家多多指教 目录 问题描述 解决方法 问题描述 使用axios组件的时候&#xff0c;把应用部署到开发板&#xff0c;提示Api9不适配 解决方法 对这类版本不…

基于Docker的安装和配置Canal

基本介绍 Canal介绍&#xff1a;Canal 是用 Java 开发的基于数据库增量日志解析&#xff0c;提供增量数据订阅&消费的中间件&#xff08;数据库同步需要阿里的 Otter 中间件&#xff0c;基于 Canal&#xff09;。 Canal背景&#xff1a;阿里巴巴 B2B 公司&#xff0c;因为…

AI绘画使用Stable Diffusion(SDXL)绘制三星堆风格的图片

一、前言 三星堆文化是一种古老的中国文化&#xff0c;它以其精湛的青铜铸造技术闻名&#xff0c;出土文物中最著名的包括青铜面具、青铜人像、金杖、玉器等。这些文物具有独特的艺术风格&#xff0c;显示了高度的工艺水平和复杂的社会结构。 青铜面具的巨大眼睛和突出的颧骨&a…

【Web】Ctfshow Nodejs刷题记录

目录 ①web334 ②web335 ③web336 ④web337 ⑤web338 ⑥web339 ⑦web340 ⑧web341 ⑨web342-343 ⑩web344 ①web334 进来是一个登录界面 下载附件&#xff0c;简单代码审计 表单传ctfshow 123456即可 ②web335 进来提示 get上传eval参数执行nodejs代码 payload: …

【力扣面试经典150题】(链表)K 个一组翻转链表

题目描述 力扣原文链接 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只…

技术分享 | 如何写好测试用例?

对于软件测试工程师来说&#xff0c;设计测试用例和提交缺陷报告是最基本的职业技能。是非常重要的部分。一个好的测试用例能够指示测试人员如何对软件进行测试。在这篇文章中&#xff0c;我们将介绍测试用例设计常用的几种方法&#xff0c;以及如何编写高效的测试用例。 ## 一…

vue和uni-app的递归组件排坑

有这样一个数组数据&#xff0c;实际可能有很多级。 tree: [{id: 1,name: 1,children: [{ id: 2, name: 1-1, children: [{id: 7, name: 1-1-1,children: []}]},{ id: 3, name: 1-2 }]},{id: 4,name: 2,children: [{ id: 5, name: 2-1 },{ id: 6, name: 2-2 }]} ]要渲染为下面…

春秋云境靶场CVE-2022-30887漏洞复现(任意文件上传漏洞)

文章目录 前言一、CVE-2022-30887描述和介绍二、CVE-2021-41402漏洞复现1、信息收集2、找可能可以进行任意php代码执行的地方3、漏洞利用找flag 总结 前言 此文章只用于学习和反思巩固渗透测试知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随…

C语言中的指针(上)

目录 一、基本概念 1.变量的存储空间 2.定义指针 3.引用与解引用 二、指针的算术运算、类型以及通用指针 1.指针的算数运算 2.指针类型以及通用型指针 三、指向指针的指针&#xff08;pointers to pointers&#xff09; 四、函数传值以及传引用 1.局部变量 2.从存储地…

gitlab环境准备

1.准备环境 gitlab只支持linux系统&#xff0c;本人在虚拟机下使用Ubuntu作为操作系统&#xff0c;gitlab镜像要使用和操作系统版本对应的版本&#xff0c;(ubuntu18.04,gitlab-ce_13.2.3-ce.0_amd64 .deb) book100ask:/$ lsb_release -a No LSB modules are available. Dist…

机器学习二元分类 二元交叉熵 二元分类例子

二元交叉熵损失函数 深度学习中的二元分类损失函数通常采用二元交叉熵&#xff08;Binary Cross-Entropy&#xff09;作为损失函数。 二元交叉熵损失函数的基本公式是&#xff1a; L(y, y_pred) -y * log(y_pred) - (1 - y) * log(1 - y_pred)其中&#xff0c;y是真实标签&…

中贝通信-603220 三季报分析(20231120)

中贝通信-603220 基本情况 公司名称&#xff1a;中贝通信集团股份有限公司 A股简称&#xff1a;中贝通信 成立日期&#xff1a;1999-12-29 上市日期&#xff1a;2018-11-15 所属行业&#xff1a;软件和信息技术服务业 周期性&#xff1a;1 主营业务&#xff1a;通信网络技术服务…

通信网络安全防护定级备案流程介绍(附流程图)

通信网络安全防护定级备案是拥有增值电信业务经营许可证并且有开展电信业务的企业要做的一件事情。刚接触这块的家人们在填报操作的时候可能对具体通信网络安全防护定级备案流程还不是很清楚&#xff0c;所以就给大家画张具体的流程图吧&#xff0c;可以更加直观的了解。 通信…

go语言学习-go环境安装

1、安装Go 1.1 下载安装 go官网 找对应电脑的版本进行安装即可。 点击安装包&#xff0c;直接下一步下一步即可&#xff0c;安装目录可以自行设置一下。 1.2 验证 windows通过cmd验证。 linux或者mac可以通过自带终端执行测试。 2、配置环境变量 2.1 windows 找到系统…

HarmonyOS开发(四):UIAbility组件

1、UIAbility概述 UIAbility 一种包含用户界面的应用组件用于与用户进行交互系统调度的单元为应用提供窗口在其中绘制界同 注&#xff1a;每一个UIAbility实例&#xff0c;都对应一个最近任务列表中的任务。 一个应用可以有一个UIAbility也可以有多个UIAbility。 如一般的…

深度学习YOLO安检管制物品识别与检测 - python opencv 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov55 模型训练6 实现效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLO安检管制误判识别与检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&…

【论文阅读】SPARK:针对视觉跟踪的空间感知在线增量攻击

SPARK: Spatial-Aware Online Incremental Attack Against Visual Tracking introduction 在本文中&#xff0c;我们确定了视觉跟踪对抗性攻击的一个新任务&#xff1a;在线生成难以察觉的扰动&#xff0c;误导跟踪器沿着不正确的&#xff08;无目标攻击&#xff0c;UA&#x…