Shell脚本语言学习1

shell解析器:指定脚本使用的shell解释器
#!/bin/bash
执行脚本:bash ./hello.sh 或者 sh ./hello.sh 必须加./
给文件赋权:chown +x hello.sh 就可以./hello.sh
扩展方案:source hello.sh 也可以执行。 . hello.sh也可以


子bash和当前bash,可以使用type source.我们执行ps -f 可以查看当前bash环境,创建一个子bash,在当前子bash环境下,依然可以运行shell文件
变量:如果子shell中设置的当前变量,父shell是不可见的
变量:::::
全局变量:层层嵌套的子bash都是可以访问的
局部变量:只在当前bash可以访问的
env打印的都是全局变量
set是所有的


用户自定义变量:
变量名=变量值 #等号前后不能有空格,在声明的时候不用加 ,使用的时候需要。如果定义一个字符串,需要加上双引号或者单引号全局变量的定义:需要先生命一个局部变量,然后通过 e x p o r t 导出。子变量修改全局变量,只会在当前 b a s h 中生效,不会影响父 b a s h , 哪怕 e x p o r t ,依然不会改变父 b a s h 在 s h e l l 中,变量是没有类型的,或者我们理解为全部都是字符串类型如果变量的值需要做数值运算,可以使用 ,使用的时候需要。如果定义一个字符串,需要加上双引号或者单引号 全局变量的定义 :需要先生命一个局部变量,然后通过export导出。子变量修改全局变量,只会在当前bash中生效,不会影响父bash,哪怕export,依然不会改变父bash 在shell中,变量是没有类型的,或者我们理解为全部都是字符串类型 如果变量的值需要做数值运算,可以使用 ,使用的时候需要。如果定义一个字符串,需要加上双引号或者单引号全局变量的定义:需要先生命一个局部变量,然后通过export导出。子变量修改全局变量,只会在当前bash中生效,不会影响父bash,哪怕export,依然不会改变父bashshell中,变量是没有类型的,或者我们理解为全部都是字符串类型如果变量的值需要做数值运算,可以使用((1+1))或者$[1+1]


只读变量和撤销变量
只读变量: readonly 变量名=值
撤销变量: unset 变量名 变量是可以撤销的,但是只读变量不能撤销


$n 其代表接受参数,n是数字,代表在执行脚本时候传递的参数数量,例如$1- 9 代表第一个到第九个参数, 10 以上的数字,可以用大括号包裹,比如 9代表第一个到第九个参数,10以上的数字,可以用大括号包裹,比如 9代表第一个到第九个参数,10以上的数字,可以用大括号包裹,比如{10},比较
特殊的$0,代表当前脚本名称
$#获取输入参数的个数,一般用于循环中,判断参数的个数是否正确,加强脚本健壮性
∗ 和 *和 @非常相似,都代表命令行所有的参数,但是 ∗ 把参数看成一个整体,例如 123456. 而 *把参数看成一个整体,例如123 456.而 把参数看成一个整体,例如123456.@把每个参数区分对待,例如[123 456]注意:在没有循环遍历的时候两者效果一样
$?最后一次执行命令状态,如果结果是0,证明上面执行的命令都是正确的,如果结果不是0,则证明上面命令不正确


运算符:
expr 表达式 ,运算符两边要有空格
a1=$(expr 10 + 5)
a1=expr 10 + 5


条件判断:
等于不等于:
test 表达式
[ 表达式 ]
shell中0是true,和其他语言不同
两个值相比较:
-eq 等于 -ne 不等于 -lt 小于 -le 小于等于 -gt 大于 -ge 大于等于
文件权限判断
-r 读 -w 写 -x 执行
文件类型判断
-e 文件是否存在
-f 文件存在并且是一个文件类型
-d 文件存在并且是一个目录类型
多条件判断
&& 与的关系,两者都成立
|| 或的关系,两者有一个成立


流程控制
if判断:
if [ 条件判断 ];then
语句
fi
或者(第二种方式多)
if [ 条件判断 ]
then
语句
fi
// 多条件用-a连接&& ,-o代表||

	if [ ] then语句else语句fiif []thenelif []thenelseficase 基本语法case $变量名 in"值1")语句;;"值2")语句;;*)语句;;esac

循环流程
for
语法
for (( 初始值;循环控制条件;变量名称))
do
语句
done

	for 变量 in 值1 值2dodone内部运算符{} 表示一个序列,例如从1到100:{1..100}whilewhile []dodonelet语法后面可以跟正常语句

shell读取控制台输入
基本语法;
read 选项 参数
选项 : -p 读取的提示符 -t 读取时的等待时间
例如:read -t 10 -p “请输入。。。” name


系统函数
date
basename:获取文件名称,它会删除所有前缀包括最后一个/字符,然后将字符串显示出来
例如:basename /abc/hgj/e 输出 e ; basename /scripts/cmd_test.sh 输出cmd_test.sh ; basename /scripts/cmd_test.sh t.sh 输出cmd_tes
dirname :获取文件路径的绝对路径,从给定的包含绝对路径的文件名中去除文件名,然后返回剩余路径
例如: echo scripts path:$(cd $(dirname 0 ) ; p w d ) 自定义函数 f u n c t i o n 函数名 ( ) r e t u r n 返回值 必须在调用函数之前先声明函数函数返回值可以通过 0);pwd) 自定义函数 function 函数名() { return 返回值 } 必须在调用函数之前先声明函数 函数返回值可以通过 0);pwd)自定义函数function函数名()return返回值必须在调用函数之前先声明函数函数返回值可以通过?获取,但注意,$?的值范围是0~255


案列:(归档文件)
#!/bin/bash# 首先判断输入参数的个数
if [ $# -ne 1 ]
thenecho "参数个数错误"exit
fi
#从参数中获取目录名称 查看目录是否存在
if [ -d $1 ]
thenecho
elseecho "目录不存在"exit
fi
# 获取目录的绝对路径
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1);pwd)
#获取当前日期
DATE=$(date +%y%m%d)
#生成的归档文件名称
FILE=archive_${DIR_NAME}_$DATE.tar.gz
# 定义生成文件路径
DEST=/home/uap-home/archive/$FILE
# 归档开始
tar -czf $DEST $DIR_PATH/$DIR_NAME
#判断归档是否成功
if [ $? -eq 0 ]
thenecho "成功"
elseecho "归档出现问题"
fi
exit定时规划
crontab -e
*/1 * * * * date >> /scripts/crontal_test.txt给脚本添加定时器
0 2 * * * 脚本路径

正则表达式:
^匹配一行的开头 以甚麽开头 grep ^d
匹配这一行的结束以甚麽结束 g r e p d 匹配这一行的结束 以甚麽结束 grep d 匹配这一行的结束以甚麽结束grepd
. 匹配任意一个字符 grep r.t
* 不能单独使用,和上一个字符连用,表示0次或者多次 grep r.t
[]表示匹配某个范围的一个字符,[6,8] 匹配6或者8 [0-9],[A-Z,a-z],[0-9]

\表示转义,并不会单独使用 grep ‘$’ 必须单引号


cut工具:
cut [选项参数] filename 默认分隔符是制表符
-f 列号 提取第几列
-d 分隔符
-c 按字符进行切割,后加n表示取第几列 比如-c 1
cut -d " " -f 1 testCut.sh


awk:
文本分析工具:
awk [选项参数] ‘/pattern/action/pattern/action’ filename
pattern 表示awk在数据中查找的内容,匹配模式
action 在找到匹配内容时所执行的一系列命令
-F 指定输入文件分隔符
-v 赋值一个用户定义变量
cat /etc/passwd| awk -F “:” ‘/^root/{print $7}’

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

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

相关文章

[BT]小迪安全2023学习笔记(第30天:Web攻防-SQL带外注入)

第30天 堆叠注入 支持数据库:MySQL、MsSQL、PostgreSQL 数据库后台能够执行堆叠操作,但不一定在注入点就能够实现堆叠操作,因为这和网站处理方式有关 二次注入 注入过程:比如在用户注册或者修改用户信息时可以在某一个存在注入…

二叉排序树的创建

二叉排序树就是节点经过排序构建起的二叉树,其有以下性质: 1. 若它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值。 2. 若它的右子树不为空,则右子树上所有节点的值均大于它的根节点的值。 3. 它的左、右子树也分…

Springboot零星知识点1

1、请求路径的组成 2、多个环境配置文件 3、对 自定义的属性 增加文字描述,而且IDEA不会警告 4、读取属性值的两种方式 5、东东

【linux】docker下nextcloud安装人脸识别插件

一、插件源码地址: GitCode - 开发者的代码家园 二、插件官网地址: Releases - Face Recognition - Apps - App Store - Nextcloud 三、插件安装教程: 1、查看本地nextcloud版本号 http://ipAddress:8080/settings/admin/overview 2、找…

【博客714】golang使用mmap来优化gc

golang使用mmap来优化gc: 背景 需要处理的对象非常多时,比如:时序数据库victoriametrics源码中,利用了mmap申请内存并自己维护,从而避免过多gc影响性能,因为频繁申请和释放堆对象会降低性能 参考victoriam…

PaddleClas 指定gpu

在使用PaddleClas进行模型训练或预测时,如果您想要指定使用特定的GPU设备,可以通过CUDA_VISIBLE_DEVICES环境变量来设置。 在命令行中设置GPU的方法如下: # 指定第0号GPU export CUDA_VISIBLE_DEVICES0 # 之后运行PaddleClas的命令&#xf…

深入解析:如何高效地更新Python字典

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、修改字典中的值 三、向字典中添加键值对 四、更新字典的两种方法总结 五、…

Java进阶学习笔记16——接口的综合案例

接口的综合案例: 接口的应用案例:班级学生信息管理模块的开发 需求: 请设计一个班级学生的信息管理模块:学生的数据有:姓名、性别、成绩。 功能1: 要求打印出全班学生的信息;功能2&#xff…

天线增益越高不一定越好

在以下应用场景下,过高的天线增益会导致性能下降:   城市环境或建筑物周围:高增益天线容易受到其他信号的干扰,在城市环境下或者在某些建筑物周围使用时,可能会被其他无线网络和其他电磁设备的信号干扰,…

浏览器的一些功能

1.改主页面 点浏览器右上角的三个点也就是一个... 点了设置 你可以在这里改它的颜色 还有页面 一些有意思的网站: sandspiel像素风格游戏 趣味互动游戏:请画一个小人 (webhek.com)​​​​​​ 2018 - makemepulse解压游戏 Layered Water (vlucendo.com)水模…

【C++项目】实时聊天的在线匹配五子棋对战游戏

目录 项目介绍 开发环境 核心技术 项目前置知识点介绍 Websocketpp 1. WebSocket基本认识 2. WebSocket协议切换原理解析 3. WebSocket报文格式 4. Websocketpp介绍 5. 搭建一个简单WebSocket服务器 JsonCpp 1. Json格式的基本认识 2. JsonCpp介绍 3. 序列化与反序…

[js] 中文编码解码encodeURI,decodeURI

encodeURI (URIstring)// 编码decodeURI (URIstring)  // 解码参考: JS 中的编码和解码(encode和decode)

CSS3盒模型与布局

盒模型与布局 居中对齐 文本居中对齐 水平居中 使用 text-align: center; 属性在块级元素内使内联元素(如文本、图片等)水平居中。 .parent {text-align: center; }垂直居中 使用 line-height 设置为与容器高度相同的值,实现单行文本的垂直居中。 .parent {height: 100…

基于地理坐标的高阶几何编辑工具算法(3)——相离面吸附

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理 工具步骤 点击面,点击“相离面吸附”工具,绘制一个面,双击结束后,与所有相交的面进行吸附 应用场景 为了让相离的两个几何面在空间上相邻,使用该工具…

ROS+UBUNTU开发常用指令

ROS部分 一、功能包编译 1.1、单独编译指定的功能包 catkin_make -DCATKIN_WHITELIST_PACKAGES"需要单独编译的包名"1.2、再次回到编译所有功能包 catkin_make -DCATKIN_WHITELIST_PACKAGES""ubuntu部分 一、清空 Bash 历史记录文件: ~/.b…

数据插值之朗格朗日插值(一)

目录 一、引言 二、代码实现 2.1 Lagrange插值求插值多项式: 代码解析: 1.vpa解释 2.ploy(x)解释: 3.conv()解释 4.poly2sym()解释 2.2 Lagrange插值求新样本值和误差估计: 代码解析&…

【编译原理】LL(1)预测分析法

一、实验目的 LL(1)的含义:第一个L表明自顶向下分析是从左向右扫描输入串,第2个L表明分析过程中将使用最左推导,1表明只需向右看一个符号便可决定如何推导,即选择哪个产生式进行推导。 LL(1) 预测分析方法是确定的自顶向下的语…

2024年【N1叉车司机】免费试题及N1叉车司机模拟试题

题库来源:安全生产模拟考试一点通公众号小程序 N1叉车司机免费试题考前必练!安全生产模拟考试一点通每个月更新N1叉车司机模拟试题题目及答案!多做几遍,其实通过N1叉车司机模拟考试题库很简单。 1、【多选题】《中华人民共和国特…

Java 反射效率

反射性能比正常new对象使用慢&#xff0c;今天我们来测试一下其中效率&#xff0c;以及探索优化。 测试方法main long start System.currentTimeMillis();for (int i0;i<10000000;i){// 调用如下不同case的测试方法分别创建一千万个对象&#xff0c;对比效率}long end Sys…

第三讲 栈、队列和数组 (1)

文章目录 第三讲 栈、队列和数组3.1 栈3.1.1 出栈元素的不同排列与卡特兰数3.1.2 栈的顺序表实现3.1.3共享栈3.1.4 栈的链表实现3.1.5 栈的两种实现的优缺点3.1.6 c中的栈( s t a c k stack stack)容器适配器3.1.7 栈的应用:star:3.1.7.1 **栈在括号匹配中的应用**3.1.7.2 **栈…