shell编程学习(二)

变量的类型

预定义变量
                            $$ 当前进程PID
                            $? 命令执行后的返回状态.0 为执行正确,非 0 为执行错误
                            $# 位置参数的数量
                            $* 所有位置参数的内容
                            $@ 所有的参数
                            $! 上一个后台进程的PID
​自定义变量
                        定义:变量名称=值
#注:
         变量名称:只能由字母,数字,下划线组成,不能以数字开头;
         注意:应该让变量名称有意义;
         = 赋值符号 前后不能有空格 ;
         值: 所有的字符串和数字都可以;
         引用变量: $变量名 或 ${变量名}。

​环境变量
                shell在开始执行时已经定义好的
                env 查看所有环境变量
                set  查看所有变量

环境变量拥有可继承性:export之后就拥有继承性
                export 导出变量(作用范围)
永久生效
        写到4个登陆脚本中 ~/.bashrc ~/profile 更好放在/etc/profile.d/* 下建立独立的环境变量配置文件

        常用环境变量: USER(用户名)
                                UID(用户uid)
                                HOME(家目录)
                                HOSTNAME(主机名)
                                PWD(所在目录)
                                PS1(命令提示符)
                                PATH(存储所有命令所在的路径)
位置变量
   $1 $2 $3 $...
编辑标本test.sh 加入位置变量$1 $2 

执行显示如下

变量运算

算式运算符: +、-、*、/、()、%取余(取模)  

运算方式:   $(())      $[]      expr

        $(())
例:      

         $[]
例:        
         expr
例:
#注:运算符号两边的空格必须写
        不能做浮点运算

乘法运算
例:
浮点运算
bash本身不能做小数计算:需要bc命令转换 (yum安装)
例:
                   #echo "2*4" | bc
                   #echo "2^4" | bc                  #2的4次方
                   #echo "scale=2;6/4" | bc     #6除以4保留小数点后两位
                   scale: 精度
结果如下
例2:
圆周率精确到1000位
#echo "scale=1000;4 * a(1)" | bc -l     #注 -l定义使用的标准数学库
结果如下

变量引用

转义:\
           当一个字符被引用时,其特殊含义被禁止
           把有意义的变的没意义,把没意义的变的有意义
常用参数
           \n换行
           \t table

 #echo -e '5\n6\n7'
结果如下 
完全引用:''   //强引 硬引
部分引用:"" //弱引 软引

变量替换-匹配截取

# 是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边)
单一符号是最小匹配;两个符号是最大匹配(贪婪匹配)
例: 设置变量 file=/dir1/dir2/dir3/my.file.txt
${file#*/}:  拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt

${file##*/}: 拿掉最后一条 / 及其左边的字符串:my.file.txt

${file#*.}:  拿掉第一个 . 及其左边的字符串:file.txt

${file##*.}: 拿掉最后一个 . 及其左边的字符串:txt
${file%/*}: 拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3

读取用户标准输入:read

read:功能就是读取键盘输入的值,并赋给变量

#参数注:
-s '后面的内容是加密信息,不要输出'
-t 超时时间
例: 这里的藻头男是需要自己输入的,并且必须要在规定的五秒内输入才有效


变量嵌套(扩展)
eval 执行字符串内的可执行命令
例:
#name=zaotounan
#zaotounan=帅哥
#eval echo '$'"${name}"
结果如下

#注:先获取name的值,通过再次构造echo命令,使用eval再一次执行语句,就达到我们的目的。

扩展basename & dirname

basename 是去除目录后剩下的名字
# 不会检测文件系统,只是取路径的最后一段,将他截取出来

例:
        #temp=/home/temp/1.test
        #base=`basename $temp`
        #echo $base
结果为下

dirname 是去除文件的目录名
# 不会检测文件系统,默认路径的最后一段为文件名,把它扇区

例:
   #temp=/home/temp/1.test
   #dir=`dirname $temp`
   #echo $dir
结果为下

dirname 获取当前脚本的路径
#可用于判断脚本的位置
$( cd $( dirname $0 ) ; pwd )  
例:编辑脚本b.sh

path=$( cd $( dirname $0 ) ; pwd )  #设置变量path
[[ $path = '/opt' ]] && echo "继续执行" || echo "请在/opt目录下执行"
执行脚本结果如下

脚本运行

•sh –x script
                这将执行该脚本并显示所有变量的值

•sh –n script
                 不执行脚本只是检查语法模式,将返回所有错误语法

•sh –v script
                执行脚本前把脚本内容显示在屏幕上

感谢观看!希望能够帮助到大家!

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

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

相关文章

前端性能优化之图像优化

图像优化问题主要可以分为两方面:图像的选取和使用,图像的加载和显示。 图像基础 HTTP Archive上的数据显示,网站传输的数据中,60%的资源都是由各种图像文件组成的,当然这些是将各类型网站平均的结果,单独…

Mysql SQL审核平台Yearning本地部署

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 Yearning 简单, 高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具,为DBA与开发人员使用…

阿里云服务器公网带宽1M/3M/5M/10M/50M百兆下载速度表

阿里云服务器公网带宽上传和下载速度对照表,1M带宽下载速度是128KB/秒,为什么不是1M/秒?阿腾云atengyun.com分享阿里云服务器带宽1M、2M、3M、5M、6M、10M、20M、30M、50M、100M及200M等公网带宽下载和上传速度对照表,附带宽价格表…

C# Winform 在低DPI创建窗体后,在高DPI运行时,窗体会自动拉伸,导致窗体显示不全

C# Winform 在低DPI创建窗体后,在高DPI运行时,窗体会自动拉伸,导致窗体显示不全, 比如在分辨率为100% 的电脑创建C#项目,当运动到分辨率为125%的电脑运行时,后者运行的窗体会自动拉伸,窗体显示…

【linux学习笔记】网络

目录 【linux学习笔记】网络检查、监测网络ping-向网络主机发送特殊数据包traceroute-跟踪网络数据包的传输路径netstat-检查网络设置及相关统计数据 【linux学习笔记】网络 检查、监测网络 ping-向网络主机发送特殊数据包 最基本的网络连接命令就是ping命令。ping命令会向指…

Java二叉树的遍历以及最大深度问题

Java学习面试指南:https://javaxiaobear.cn 1、树的相关概念 1、树的基本定义 树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、单位的组织架构、等等。 树是由n&#…

VMware中找到存在但是不显示的虚拟机(彻底发现)VMware已创建虚拟机不显示

删除VMware中的虚拟机的时候,可能没有把虚拟机完全删除,或者说 “移除” 后找不到虚拟机在哪里,内存空间也没有得到释放,那该如何解决呢? 1.明确: “移除” 不等于 “从磁盘删除” 移除:只…

【IPC通信--socket套接字--心跳包】

Socket 心跳包 提高网络通信稳定性 随着网络通信技术的不断发展,网络通信已成为我们日常工作和生活中不可或缺的一部分。但是在使用网络通信的过程中,时常会遇到网络延迟、丢包等问题,这些问题不仅影响我们的工作和生活效率,也会…

【Pytorch】学习记录分享14——视频分析3D卷积

【Pytorch】学习记录分享14——视频分析3D卷积 1. 视频分析 3D卷积2. UCF101数据3. U3D算法 1. 视频分析 3D卷积 3D卷积的简介 在图像处理领域,被卷积的都是静态图像,所以使用2D卷积网络就足以。而在视频理解领域,为了同时保留时序信息&…

解决DolphinDB vscode插件重启后无法访问的问题

把vscode的代理关掉: 左下角小齿轮,打开setting搜索框里搜索proxy将Http:Proxy Support从override改为off,即可生效

python实现多进程和多线程

目录 一:介绍 二:多线程实现 三:多进程实现 一:介绍 Python 的多线程和多进程都是实现并发执行的方式,但它们有一些关键的区别: 线程共享进程的资源,而进程拥有自己的资源。这意味着线程之间…

Java SE入门及基础知识合集

Java SE入门及基础(1):JavaSE入门及基础(1)-CSDN博客 Java SE入门及基础(2):Java SE入门及基础(2)-CSDN博客 Java SE基础及入门(3)&…

K210基础实验系列

CanMV K210 开发板: CanMV K210 是由 01Studio 设计研发,基于嘉楠科技边缘计算芯片 K210 ( RSIC V 架构, 64 位双核)方案的一款开发板,采用硬件一体化设计( K210 核心板、 摄像头、 LCD 集成在一个…

聊一聊 webpack 和 vite 的开发服务代理的问题

webpack 和 vite webpackVite重新编辑的问题 changOrigin: true如何定义 /api ? webPack And Vite 都是两个比较好用的打包工具,尤其是 Vite, 几几年流行忘记了,特色就是服务启动极快,实现预加载,感觉 webPack 要比 Vite 要复杂一…

Redis反序列化的一次问题

redis反序列化的一次问题 1. 问题描述 springbootredis不少用,但是一直没遇到什么问题,直接代码拷贝上去就用了。这次结合spring-security,将自定义的spring-security的UserDetails接口的实现类SecurityUser,反序列化取出时报错…

java推荐系统:好友推荐思路

1.表的设计 表里面就两个字段,一个字段是用户id,另外一个字段是好友id,假如A跟B互为好友,那在数据库里面就会有两条数据 2.推荐好友思路 上面的图的意思是:h跟a的互为好友,a跟b,c&am…

JavaScript 中的数组过滤

在构建动态和交互式程序时,您可能需要添加一些交互式功能。例如,用户单击按钮以筛选一长串项目。 您可能还需要处理大量数据,以仅返回与指定条件匹配的项目。 在本文中,您将学习如何使用两种主要方法在 JavaScript 中过滤数组。…

OS_lab——bochs源码的编译与安装

1. 实验环境VMware station 15 Ubuntu 14.04.6 32位。2. 实验步骤2.1 安装虚拟机,并在虚拟机根目录下编译并安装bochs环境。 2.2 使用bochs自带工具bximage创建虚拟软驱。 2.3 编写引导程序boot.asm并用nasm编译得到引导文件boot.bin和boot.com。 2.4 修改bochs…

密码学中的Hash函数

目录 一. 介绍 二. hash函数的五个基本性质 (1)压缩性 (2)正向计算简单性 (3)逆向计算困难性 (4)弱无碰撞性 (&…

【2058错误】sql软件链接数据库 mysql 报错误2058

【2058错误】sql软件链接数据库报错误2058 操作:仅需在mysql登陆之后运行一行代码即可:注意1.后面必须是%,而不是别人说的 localhost2.此处的password是你自己的mysql密码。 操作:仅需在mysql登陆之后运行一行代码即可&#xff1a…