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
                执行脚本前把脚本内容显示在屏幕上

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

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

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

相关文章

Next.js 第一次接触

因为需要整个漂亮的在线文档,所以接触了next.js,因为对前端js本身不够熟悉,别说对react.js 又不会,时间又不允许深入研究,所以,为了加一个导航菜单,极其痛苦。 有点小bug,不过不影响…

《EnlightenGAN: Deep Light Enhancement withoutPaired Supervision》论文超详细解读(翻译+精读)

前言 最近学习低照度图像增强时读到这篇EnlightenGAN的论文觉得写得很有意思,讲故事的手法也很值得小白写论文时模仿,今天就来带大家读一下~ 目录 前言 ABSTRACT—摘要 翻译 精读 一、INTRODUCTION—简介 翻译 精读 二、RELATED WORKS—相关工…

Joplin配合teracloud进行多版本客户端分别笔记同步

最近瞎搜索joplin,意外在github上搜到plugins,插件仓库,里面有一个思维导图的插件我还是蛮喜欢的,结果下载后安装发现,我当前的Jopin的版本如下 (Joplin 2.7.15 (prod, win32) 同步版本: 3 配置文件版本: 4…

Linux Ubuntu 20.04.6 Intel WiFi6 Ax411 1690i Ax1690i Killer 解决无线网卡识别不出来问题

项目场景: 网卡型号:英特尔 Killer™ Wi-Fi 6E AX1690 i/s ubuntu 版本 uname -a Linux kuanli 5.15.0-91-generic #101~20.04.1-Ubuntu SMP Thu Nov 16 14:22:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux cat /proc/version Linux version 5.15.0-9…

MySQL忘记密码,如何重置密码(Windows)

1. 停止MySQL服务 打开“服务”管理工具(可以在开始菜单搜索“服务”或运行 services.msc)。 找到你的MySQL服务,可能叫别的,但是应该都是mysql开头的。 鼠标右键停止运行它。 2. 跳过权限表启动 MySQL 打开命令提示符&#x…

PyQT5+MySQL的学生信息管理系统【附源码,运行简单】

PyQT5MySQL的学生信息管理系统【附源码,运行简单】 总览 1、《PyQT5MySQL的学生信息管理系统》1.1 方案设计说明书设计目标需求分析工具列表 2、详细设计2.1 登录2.2 程序主页面2.3 学生新增界面2.4 学生更改界面2.4 学生删除界面2.5 其他功能贴图 3、下载 总览 自…

【好书推荐】ReactJS实践入门

作者简介 Chris Minnick是一位多产的作家、博主、培训师、演说家和Web工程师。他创立的WatzThis?公司,一直致力于寻找更好的方法向初学者教授计算机和编程技能。 Chris拥有超过25年的全栈开发经验,他也是一名教龄超过10年的培训师&#xff0c…

使用C#发送邮箱验证码

使用C#发送邮箱验证码 在很多应用程序中,我们需要使用邮箱来进行用户身份验证。其中一种常见的方式是通过发送验证码到用户的邮箱,然后要求用户输入该验证码进行验证。本文将介绍如何使用 C# 发送邮箱验证码。 声明 验证码登录没有用任何的工具&#…

linuxnodejs 20.* 安装问题,version `GLIBCXX_3.4.26‘

背景 今天服务器被重置拉,nodejs 环境不存在,特意安装下nodejs,一访问官网,妈呀,居然到20版本拉!就尝试安装下最新版本! 过程 $ cd /opt $ curl -OL https://nodejs.org/dist/v20.10.0/node-v2…

C++11_可变参数模版

文章目录 前言一、可变参数模版是什么?二、如何使用可变参数模版1.怎么解析可变参数模版2.可变参数模版的实际应用 总结 前言 C11 ,添加了许多有用的功能,上章我们主要讲解了右值引用,这章我们来讲解可变参数模版的使用。 提示&a…

Spring之循环依赖底层源码(一)

文章目录 一、简介1. 回顾2. 循环依赖3. Bean的生命周期回顾4. 三级缓存5. 解决循环依赖的思路 二、源码分析三、相关问题1. Async情况下的循环依赖解析2. 原型Bean情况下的循环依赖解析3. 构造方法导致的循环依赖解析 一、简介 1. 回顾 前面首先重点分析了Spring Bean的整个…

如何使用 CMake 生成一个静态库

文章目录 tutorial_3/CMakeLists.txttutorial_3/src/CMakeLists.txtcmake_tutorial/tutorial_3/src/hello.cpptutorial_3/src/hello.h根目录的 CMakeLists.txtsrc 目录的 CMakeLists.txthello.cpp 和 hello.h构建过程总结 tutorial_3/CMakeLists.txt cmake_minimum_required(V…

excel3基础图标与透视图表的制作

业务需求1 给逾期金额也加上条形图,同时制作各个城市的逾期发展趋势 思路: 操作顺序:选中3列数据(8月上旬逾期金额、8月中旬逾期金额和8月下旬逾期金额)–开始–条件格式–数据条–渐变填充(第5个)&#xf…

厦门大学OpenHarmony技术俱乐部开创“1+N”新模式,加速推动产学研融合

12月29日,OpenHarmony技术俱乐部再添重将——在多方见证下,厦门大学OpenHarmony技术俱乐部在翔安校区益海嘉里楼报告厅正式揭牌成立,现场出席领导及师生代表近千人。 成立仪式现场 OpenHarmony技术俱乐部 携手厦门大学共绘开源生态新图景 OpenHarmony是由开放原子开源基金…

STM32F407ZGT6时钟源配置

1、26M外部时钟源 1、25M外部时钟源

cmd命令启动C# windows服务程序

因为Process.Manage.Service.exe程序为Windows服务程序,不能直接双击打开,所以需要借助windows系统自带InstallUtil.exe程序来启动它。 以管理员身份运行cmd命令控制台窗口 输入命令进入到InstallUtil.exe程序所在的文件夹 cd C:\Windows\Microsoft.NET…

[SAP ABAP] ABAP基础语法

ABAP(Advanced Business Application Programming)是一种编程语言,用于SAP软件的开发和定制 SAP ABAP是一种高级语言,主要用于在SAP平台上为大型企业和金融机构开发企业应用程序 1. ABAP基本语法结构 ABAP源程序由注释和ABAP语句组成,其中…

Linux内核组成

Linux内核的组成 /boot/vmlinuz-4.18.0-80.el8.x86_64 :启动时用到的内核 /lib/modules/4.18.0-80.el8.x86_64 :内核模块 /boot/initramfs-4.18.0-80.el8.x86_64.img :启动时提供必要的内核模块 kernel-core安装包里面包含了Linux内核启动…

Linux驱动学习—内核定时器

1、内核定时器 1.1 Linux内核定时器概念 不同于单片机定时器,LInux内核定时器是一种基于未来时间点的计时方式,以当前时刻来启动的时间点,以未来的某一时刻为终止点。比如,现在是10点5分,我要定时5分钟,那…

Java反射和动态代理

文章目录 1、反射1.1 反射的概述1.2 反射作用1.3 获取字节码文件对象的方式1.4 字节码文件和字节码文件对象1.5 获取构造方法1.6 获取构造方法并创建对象1.7 获取成员变量并获取值和修改值1.8 获取成员方法1.9 获取成员方法并运行1.10 反射练习1.10.1 泛型擦除1.10.2 修改字符串…