Linux中的shell编程(二)

news/2025/2/23 2:50:50/

变量的类型

预定义变量
                            $$ 当前进程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.ppmy.cn/news/1291947.html

相关文章

市场复盘总结 20240104

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整 昨日回顾: 方法一:指标选股 select * from dbo.ResultAll where 入选类型 like %指标选股% and 入选日期=20240104;方法二:趋势选股法 1、最低价持续3日上涨 2、均价…

算法31:针对算法30货币问题进行拓展 + 时间复杂度 + 空间复杂度优化--------从左往右尝试模型

在算法30中,我们说过从左往右尝试模型,口诀就是针对固定集合,就是讨论要和不要的累加和。 那么对于非固定集合,我们应该怎么做呢? 针对非固定集合,面值固定,张数不固定。口诀就是讨论要与不要…

【iOS安全】JS 调用Objective-C中WKWebview Handler的三种方式

有三种实现途径 1. WKScriptMessageHandler OC部分:注册并实现Handler 将OC中的方法"nativeMethod"注册为JavaScript Message Handler,从而WebView中的JavaScript代码可以调用该方法 // Register in Objective-C code - (void)setupWKWebVi…

paddlehub 文本检测使用

PaddleHub负责模型的管理、获取和预训练模型的使用。 参考:https://github.com/PaddlePaddle/PaddleHub/tree/develop/modules/image/text_recognition/chinese_text_detection_db_server import paddlehub as hub import cv2 # from utils import cv_show import…

用贪心算法编程求解任务安排问题

题目:用贪心算法编程求解以下任务安排问题 一个单位时间任务是恰好需要一个单位时间完成的任务。给定一个单位时间任务的有限集S。关于S的一个时间表用于描述S中单位时间任务的执行次序。时间表中第1个任务从时间0 开始执行直至时间1 结束,第2 个任务从时…

【LeetCode】150. 逆波兰表达式求值(ASCII码)

今日学习的文章链接和视频链接 leetcode题目地址:150. 逆波兰表达式求值 代码随想录题解地址:代码随想录 题目简介 即将后缀表达式转换成中缀表达式并计算。 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 …

[C#]C# OpenVINO部署yolov8图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 抛弃了前几代模型的 Anchor-Base。 YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来,领域内的研究者们…

计算机网络——网关或代理

1. 网关或代理的概念 网络中的代理服务器(proxy)或网关(passerelle)的概念。 在OSI模型的各个层次中,代理或网关充当中间实体,可以在不同的层次上提供连接和转发功能。 2. 代理或网关工作层次 在这种配置中…