shell

目录

一.运行方式

二.编程习惯

三.变量

3.1变量的命名

3.3普通变量(局部变量)

3.4特殊变量

3.5变量子串

3.6变量赋值

四.运算方式

4.1$((    ))

4.2let

4.3expr

4.4bc(小数运算)

4.5$[ ]

4.6awk

4.7总结运算方式

五.条件测试语句

5.1文件

5.2条件测试表达式

5.3字符串


一.运行方式

方式一方式二方式三方式四方式五
sh test.shbash test.sh

chmod a+x

./test.sh

. test.shsource test.sh

二.编程习惯

  • 在脚本中尽量不用中文
  • 脚本名见名知意
  • 编写流程控制语句时,先将结构写出来

三.变量

3.1变量的命名

  • 变量不能以数字开始
  • 多个单词通过_连接

3.2环境变量(全局变量)

系统定义的变量,用大写字母表示

PATH:当你输入一个命令时,系统会在PATH中定义的目录中查找该命令的可执行文件
HOME:指定当前用户的主目录路径
USER:当前用户的用户名

查看环境变量:echo $PATH

3.3普通变量(局部变量)

定义示例:变量名=变量值

注意:变量名和值之间没有空格

示例:
        a="中国"

3.4特殊变量

$0脚本的名称

$n

脚本的第几个参数
$#脚本的参数个数
$*取出所有的参数,添加双引号时,整个整体作为一个参数
$@取出所有的参数,添加双引号时,每个参数作为独立的参数
$?
前一个命令的返回状态码  $?=0 ==>成功执行前一条命令,$?!=0反之
$$
返回本程序的进程 ID PID ),不常用
$!
获取上一个在后台工作的进程的进程号,不常用
$_
保存之前执行的命令的最后一个参数,不常用

注意:当$n中n>=10时,需改成${10},${11}的形式

3.5变量子串

统计字符数方法:

方式一:
[root@serverc ~]# name="mkhfe"
[root@serverc ~]# echo $name
mkhfe
[root@serverc ~]# echo ${#name}
5

方式二:
[root@serverc ~]# echo $name | wc -L
5

方式三:
[root@serverc ~]# echo $name | awk '{print length()}'
5



子串截取:

方式一:
[root@serverc ~]# text="huekjf jhy"
[root@serverc ~]# echo ${text:5}    #从指定位置截取到末尾
f jhy
[root@serverc ~]# text="huekjf jhy"
[root@serverc ~]# echo ${text:5:3} #从指定位置截取到指定的长度位置
f j

方式二:
[root@serverc ~]# echo $text | cut -c 1-4
huek

3.6变量赋值

1.直接赋值
var=a
2.引用其他命令结果赋值
ip=`date'
或
ip=$(date)
3.交互式变量赋值
read -p "a number" number
4.脚本传参赋值
$1 $2 $3

四.运算方式

4.1$((    ))

[root@serverc ~]# c=$((1+2))
[root@serverc ~]# echo $c
3

4.2let

[root@serverc ~]# let c=1+2
[root@serverc ~]# echo $c
3

4.3expr

[root@serverc ~]# expr 1 + 2
3

[root@serverc ~]# expr 1 \* 2
2

注意:

  • 乘法运算时需要加转义符,因为*会被识别为通配符
  • 运算的符号两边存在一个空格

4.4bc(小数运算)

[root@serverc ~]# echo 4/3 |bc -l
1.33333333333333333333

4.5$[ ]

[root@serverc ~]# echo $[1+2]
3

4.6awk

[root@serverc ~]# awk 'BEGIN{print 1/3 3/7}'
0.3333330.428571


#传参方式
[root@serverc ~]# x=1
[root@serverc ~]# y=2
[root@serverc ~]# awk -vn1=$x -vn2=$y 'BEGIN{print n1+n2}'
3

4.7总结运算方式

bc, awk可用于小数运算,其余方式只能进行整数运算

五.条件测试语句

5.1文件

[root@serverc ~]# [ -d /etc ];echo $?
0

[root@serverc ~]# [ -f /etc/hosts ];echo $?
0

[root@serverc ~]# [ -e /etc/passwd ];echo $?
0

5.2条件测试表达式

[ "$num" -eq 1 ] && {
echo 1
exit 0
}

[ "$num" -eq 2 ] && {
echo 2
exit 0
}

5.3字符串

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js实现动漫拼图1.0版

文章目录 1 实现效果视频2 功能实现思路3代码实现 1 实现效果视频 拼图1.0 2 功能实现思路 布局忽略(小白学前端,不献丑了) 左侧拼图格 左侧4*4的拼图小格子 利用表格实现,规划好td的大小,给每个格子加上背景图片&…

计算方法实验2:利用二分法及不动点迭代求解非线性方程

一、问题描述 利用二分法及不动点迭代求解非线性方程。 二、实验目的 掌握二分法及不动点迭代的算法原理;能分析两种方法的收敛性;能熟练编写代码实现利用二分法及不动点迭代来求解非线性方程。 三、实验内容及要求 二分法 (1) 编写代码计算下列数字…

类和对象 第五部分第四小节:赋值运算符重载

C编译器至少给一个类添加4个函数 1.默认构造函数无参,函数体为空 2.默认析构函数无参,函数体为空 3.默认拷贝沟早函数,对属性进行值拷贝 4.赋值运算符“operator”,对属性进行值拷贝 如果类中有属性指向堆区,做赋值操作…

上推加载更多组件

本组件使用的是TaroReact 实现的 ,具体代码如下 一共分为tsx和less文件 //index.tsx /** RefreshLoading* description 上推加载更多组件* param loading boolean* param style* returns*/import { View } from "tarojs/components"; import React, { FC…

[ESP32 IDF] wifi 的应用

目录 背景知识 wifi的基本连接使用 WiFi篇—— WiFi两种模式文章中二、WiFi 的启动(STA 及 AP 模式) 输出现象 通过websocket控制LED 实践验证 实验现象 背景知识 WIFI是ESP32非常重要的一个功能,想要使用一下IDF的API实现将ESP32连…

深度学习核心技术与实践之深度学习研究篇

非书中全部内容,只是写了些自认为有收获的部分。 Batch Normalization 向前传播 (1)三个主要任务:计算出每批训练数据的统计量。 对数据进行标准化 对标…

vue 使用 v-viewer 用于图片浏览的Vue组件,支持旋转、缩放、翻转等操作,基于viewer.js。

作者连接 npm: npm install v-viewerlegacy viewerjs main.js 引入: // 引入Viewer插件 import VueViewer, { directive as viewerDirective } from v-viewer; // 引入Viewer插件的图片预览器的样式 import viewerjs/dist/viewer.css; // 使用Viewer图片…

最新Unity DOTS Instancing合批:如何针对单个渲染实体修改材质参数

最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去的动画时间。但是在做大…

RabbitMQ“延时队列“

1.RabbitMQ"延时队列" 延迟队列存储的对象是对应的延迟消息,所谓“延迟消息”是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费 注意RabbitMQ并没有延时队列慨念,…

vite+ts+vue3打包的过程和错误

文章目录 概要vite.config.ts配置tsconfig.json 的配置package.json 的配置路由配置打包打开打包后的文件小结 概要 完成vite的打包,和在本地打开页面 记录一下,vite打包过程中的问题!!! vite.config.ts配置 vite.config.ts配置打包的相关配置 import…

Linux实验记录:使用RAID(独立冗余磁盘阵列)

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 目录 前言: 备注: 部署磁盘阵…

菱形打印和十进制ip转二进制

1.菱形打印 用for循环 #!/bin/bashread -p "请输入菱形的大小&#xff1a;" num #打印向上的等腰三角形 for ((i1;i<num;i)) dofor ((jnum-1;j>i;j--))doecho -n " " #打印的是前面的空格donefor ((k1;k<2*i-1;k))doecho -n "*" #打印…

NPDP认证:产品经理的国际专业认证

你是否想证明自己在产品开发与管理方面的专业能力&#xff1f;NPDP认证正是你需要的&#xff01;&#x1f525; NPDP认证&#xff0c;即产品经理国际资格认证&#xff0c;由美国产品开发与管理协会&#xff08;PDMA&#xff09;所发起&#xff0c;是全球公认的新产品开发专业认…

【大厂AI课学习笔记】1.2 人工智能的应用(1)

目录 1.2 人工智能的应用 1.2.1 产业中人工智能的应用 金融 教育 医疗 交通 制造 ——智慧金融 智能风控 智能理赔 智能投研 &#xff08;声明&#xff1a;本学习笔记学习原始资料来自于腾讯&#xff0c;截图等资料&#xff0c;如有不合适摘录的&#xff0c;请与我联…

【Sql Server】新手一分钟看懂在已有表基础上增加字段和说明

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

Python根据Excel表进行文件重命名

一、问题背景 在日常办公过程中&#xff0c;批量重命名是经常使用的操作。之前我们已经进行了初步探索&#xff0c;主要是通过批处理文件、renamer软件或者Python中的pathlib等模块对当前目录下的文件进行批量重命名。 而今天我们要使用的是PythonExcel的方法对指定目录下的文…

开发工具之GIT协同开发流程和微服务部署实践与总结

GIT协同开发流程和微服务部署的实践&#xff0c;并总结经验和教训。通过合理的GIT协同开发流程和良好的微服务部署策略&#xff0c;团队可以更高效地开发和部署软件。 ## 引言 在当今快节奏的软件开发环境中&#xff0c;采用合适的工具和流程对于实现高效协同开发和可靠部署至…

uniapp 解决键盘弹出页面内容挤压问题

page.json 配置 加 “app-plus”: { “softinputMode”: “adjustResize” } {"path": "pages/jxx/xx","style": {"navigationBarTitleText": "贺卡DIY","enablePullDownRefresh": false,"app-plus": {…

【李宏毅机器学习】Transformer 内容补充

视频来源&#xff1a;10.【李宏毅机器学习2021】自注意力机制 (Self-attention) (上)_哔哩哔哩_bilibili 发现一个奇怪的地方&#xff0c;如果直接看ML/DL的课程的话&#xff0c;有很多都是不完整的。开始思考是不是要科学上网。 本文用作Transformer - Attention is all you…

仅使用 Python 创建的 Web 应用程序(前端版本)第11章_订单详细

本章我们将实现订单列表页面。 完成后的图片如下(与订单列表相同)。 由于模型和服务是在订单列表页面创建的,因此本章将省略它们。 No分类内容1Page定义PageId并创建继承自BasePage的页面类2Application将页面 ID 和页面类对添加到 MultiPageApp 的页面中Page:定义PageId并…