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”。…

使用Pytorch测试cuda设备的性能(单卡或多卡并行)

以下CUDA设备泛指NVIDIA显卡 或 启用ROCm的AMD显卡 测试环境&#xff1a; Distributor ID: UbuntuDescription: Ubuntu 22.04.3 LTSRelease: 22.04Codename: jammy 1.首先&#xff0c;简单使用torch.ones测试CUDA设备 import torch import timedef cuda_benchmark(device_id…

ubuntu18.04 terminal打不开的解决方法

目录 现象解决 现象 打开terminal时,一直转圈,然后消失,总是打不开terminal. 解决 编辑文件sudo vim /etc/default/locale,修改为 # File generated by update-locale LANG"en_US.UTF-8" LANGUAGE"en_US:en"重启系统,问题解决.

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不适配 解决方法 对这类版本不…

机器学习模型超参数优化最常用的5个工具包

优化超参数始终是确保模型性能最佳的关键任务。通常&#xff0c;网格搜索、随机搜索和贝叶斯优化等技术是主要使用的方法。 今天分享几个常用于模型超参数优化的 Python 工具包&#xff0c;如下所示&#xff1a; scikit-learn&#xff1a;使用在指定参数值上进行的网格搜索或…

leetcode每日一题31

搜索旋转排序数组 那……二分法呗 数组中的数可以相同 比 33. 搜索旋转排序数组 多了一个「有重复元素」&#xff0c;导致无法根据 num > nums[0] 来判断 num 在哪一半&#xff0c;比如 [1,1,1,1,1,2,1,1,1] 旋转数组两头相等&#xff0c;元素 1 可能在左半边可能在右半边 …

vue2 - SuperMap3D加载基于Nginx服务生成的3DTileset模型切片服务地址

文章目录 🍍开发环境🍉1:nginx发布3Dtileset模型切片服务🍍1.1:准备3DTileset文件🍍1.2:安装nginx服务,配置相关文件1.2.1:下载nginx1.2.2:下载完解压文件如下1.2.3:将3Dtileset模型文件放置 nginx-1.24.0/html/gc 新建文件中如下:1.2.4:配置nginx服务🍉2:…

基于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;那么请将最后剩余的节点保持原有顺序。 你不能只…

面试题:设置view点击事件不回调的几种方式和原理

如何设置view 点击事件不回调&#xff0c;如何实现&#xff1f;有什么区别&#xff1f; setEnabled(false) 这个方案用于设置view是否可以响应用户的其他交互事件如触摸&#xff0c;轨迹球等。 setClickable(false) 这个方法用于设置view是否可以响应用户的点击事件。 set…

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

对于软件测试工程师来说&#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 }]} ]要渲染为下面…

java算法学习索引之二叉树问题

一 分别用递归和非递归方式实现二叉树先序、中序和后序遍历 用递归和非递归方式&#xff0c;分别按照二叉树先序、中序和后序打印所有的节点。我们约定&#xff1a;先序遍历顺序为根、左、右&#xff1b;中序遍历顺序为左、根、右&#xff1b;后序遍历顺序为左、右、根。 递…

春秋云境靶场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.从存储地…