bash简化if-else

#!/usr/bin/env bashsource /bal/bash-simplify/dir_util.sh#测试_get_arg:
#debug__get_arg=true; x=$(_get_arg example.sh 37 "true ||") ; echo $x
#_is_git_2xfunction _get_arg(){
##若变量debug__get_arg为空,则设置其为false
# [ "x"  == "x$debug__get_arg"  ] && debug__get_arg=false# $debug__get_arg && set -x  #若 调试本函数 则 set -xscriptF=$1
lnK=$2
retF=$3
lnText=$(awk -v line="$lnK" 'NR==line' $scriptF)_trimLn=$(echo "$lnText" | sed 's/^[[:space:]]*//')  #1. 用正则删除前导空格
argText=$(echo "$_trimLn" | awk '{sub(/&& \\/,"")}1')  #3.  在 禁用正则(-literal) 时  删除 后缀"&& \"# argText=$(echo "$_trimLn" | sed 's/^ *true ||//')  #以上 '#2.' 写死 的样式echo  -n "$argText" > $retF
#echo 不换行# { $debug__get_arg  &&  set +x ;}  ; unset debug__get_arg  # { 若 调试本函数 则 set +x ;} ; 设置 变量debug__get_arg 为空}function ifelse(){
#此函数 即 ifelse 实现 如下伪码 : 
#cmdA1ExitCode=cmdA1()
#if cmdA1ExitCode == 0: #cmdA1正常执行
#   echo $msgCmdA1Good
#   cmdA2()
#else: # 此else 即 cmdA1ExitCode != 0 即 cmdA1异常执行
#   if cmdB1():
#       echo $msgCmdB1Good
##############函数ifelseif伪码结束###################保存外部调用这是否 启用了 bash调试
#获取调用者 是否开启了 bash -x  即 是否开启 bash 调试
#返回变量 _out_en_dbg, _out_dbg
get_out_en_dbg && \
echo $_out_en_dbg
##{取参数这一段不显示命令
set +x && \scriptF=$1
lnNum=$2# debug__get_arg=true  #调试函数_get_arg
_x="/tmp/_get_arg__retF_"
_retF="${_x}$(date +%s%N)"
_get_arg $scriptF   $((lnNum+1))   $_retF  #忽略$3
cmdA1=$(cat $_retF)# debug__get_arg=false #不再调试函数_get_arg_retF="${_x}$(date +%s%N)"
_get_arg $scriptF   $((lnNum+2))   $_retF   #忽略$4
msgCmdA1Good=$(cat $_retF)_retF="${_x}$(date +%s%N)"
_get_arg $scriptF   $((lnNum+3))   $_retF   #忽略$5
cmdA2=$(cat $_retF)#$((lnNum+4)) , 跳过 第4行 ,因为第4行是 注释 #else:_retF="${_x}$(date +%s%N)"
_get_arg $scriptF   $((lnNum+5))   $_retF   #忽略$6
cmdB1=$(cat $_retF)_retF="${_x}$(date +%s%N)"
_get_arg $scriptF   $((lnNum+6))   $_retF   #忽略$7
msgCmdB1Good=$(cat $_retF)[ "X$_ifelse_echo_args" != "X" ] &&  echo "cmdA1:$cmdA1, msgCmdA1Good:$msgCmdA1Good, cmdA2:$cmdA2, cmdB1:$cmdB1, msgCmdB1Good:$msgCmdB1Good"##取参数这一段不显示命令}
##如果外部调用者启用了 bash调试, 则恢复调试
{ { $_out_en_dbg && set -x ;} || : ;} && \{ \
#执行 cmdA1
{ eval $cmdA1 ; _cmdA1_ret=$? ;} && \
#则 先 显示 msgCmdA1Good 再 执行 cmdA2
{ eval "echo $msgCmdA1Good" ; eval $cmdA2  ;} \
; } ; if [ "X$_cmdA1_ret" != "X0" ]; then  \
#若 cmdA1.返回码 != 正常返回码0 :
{ \
#则 执行 cmdB1 并 显示 msgCmdB1Good
eval $cmdB1 &&   \
eval "echo $msgCmdB1Good" \
; }
fi}

-

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

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

相关文章

Linux离线安装python3(源码编译)

1、下载python包 下载python3.9.6的源码包 python下载 下载后,解压,目录如下: -rw-------. 1 root root 1454 Aug 26 2023 anaconda-ks.cfg -rw-r--r--. 1 root root 25640094 Apr 4 21:52 Python-3.9.6.tgz drwxrwxr…

LeetCode 1049. 最后一块石头的重量 II

有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&…

C# 访问修饰符 默认

命名空间下的元素&#xff1a;类&#xff08;Class&#xff09;中的成员&#xff1a;结构&#xff08;Struct&#xff09;中的成员&#xff1a;接口&#xff08;Interface&#xff09;中的成员&#xff1a;接口&#xff08;Interface&#xff09;本身&#xff1a;枚举&#xff…

用TOMCAT部署web项目教程

文章目录 引言I 使用webapps文件夹II 利用server.xmlIII 自定义配置文件IV 预备知识引言 在开发阶段,一般使用IDE如MyEclipse来部署web项目,不要忘记手动部署的三种方式。 将编译好的项目 copy 到 webapps 目录下 在 server.xml 文件中配置,但从 tomcat5.0版本开始后,serv…

前端三剑客 —— JavaScript (第一天)

目录 回顾内容 1.弹性布局 2.网格布局 JavaScript 概述 发展 浏览器 什么是Javascript JavaScript 能干什么 JavaScript需要的环境 JavaScript初体验 基本数据 JS书写方式 行内JS 页面JS 外部JS 1&#xff09;创建外部JS文件 2&#xff09;编写页面 对话框 警…

彩虹易支付实名认证

实名认证接口主要分为3大类&#xff1a;支付宝扫码认证、微信扫码认证、运营商手机号三要素认证。 支付宝扫码认证 支付宝身份验证&#xff1a;申请地址&#xff0c;该接口费用1元/人&#xff0c;支持人脸识别&#xff0c;同一个人重复验证不重复收费。支付宝实名信息验证&am…

ubuntu-server部署hive-part2-安装hadoop

参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本&#xff1a;ubuntu-server-22.04.3 虚拟机&#xff1a;virtualbox7.0 安装hadoop ​​​​​​下载上传 下载地址 https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/ 以root用…

simulink的硬件支持下,串口发送的模型,stm32f407的串口程序调试错误

串口调试助手能接收到数据&#xff0c;为何是8个数据&#xff1f;如之奈何&#xff1f; 参考文章&#xff1a; STM32CubeMxMATLAB Simulink串口输出实验_用stm32cubemx生成的串口都是输出-CSDN博客根据 该文章发送字符串 hello&#xff0c;发送数量为5&#xff0c;接收也是he…

【PyQt5篇】多线程

文章目录 &#x1f354;使用QtDesigner进行设计&#x1f6f8;实现多线程&#x1f339;效果&#x1f50e;原因 &#x1f354;使用QtDesigner进行设计 对应的代码btn.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0">&l…

边界值设计测试用例

​ 边界值分析法&#xff08;Boundary Value Analysis&#xff0c;BVA&#xff09;的测试用例来自于等价类的边界&#xff0c;是等价类划分法的补充。根据边界值划分法&#xff0c;等价类分析法中的测试数据不是选取等价类中的典型值或任意值&#xff0c;而是应当选取正好等于、…

C++语言学习(三)——内联函数、auto、for循环、nullptr

1. 内联函数 &#xff08;1&#xff09;概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调 用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率。 内联函数是一种编译器指令&#xff0c;用于告诉编译器…

Web3 革命:揭示区块链技术的全新应用

随着数字化时代的不断发展&#xff0c;区块链技术作为一项颠覆性的创新正在改变着我们的世界。而在这一技术的进步中&#xff0c;Web3正逐渐崭露头角&#xff0c;为区块链技术的应用带来了全新的可能性。本文将探讨Web3革命所揭示的区块链技术全新应用&#xff0c;并展望其未来…

Redis从入门到精通(四)Redis实战(一)短信登录

文章目录 前言第4章 Redis实战4.1 短信登录4.1.1 基于session实现短信登录4.1.1.1 短信登录逻辑梳理4.1.1.2 创建测试项目4.1.1.3 实现发送短信验证码功能4.1.1.4 实现用户登录功能4.1.1.5 实现登录拦截功能4.1.1.6 session共享问题 4.1.2 基于Redis实现短信登录4.1.2.1 Key-Va…

顺子日期(结果填空)

为了解决这个问题&#xff0c;我们需要遍历2022年的每一天&#xff0c;并检查日期的每一位数字以查找顺子。下面是一个Java程序&#xff0c;用于计算2022年中的顺子日期数量&#xff1a; public class Main {public static void main(String[] args) {int count 0; for (int…

零日攻击测试

目录 声明 介绍 1.明确测试目标和范围 2.组建专业团队 3.使用合法和道德的方法 4.模拟真实攻击场景 5.记录和报告测试结果 6.遵守法律和规定 注意 流程 1.确定测试目标和范围 2.信息收集 3.漏洞扫描 4.漏洞验证 5.编写利用代码 6.执行测试 7.结果报告 方法 1…

[StartingPoint][Tier0]Preignition

Task 1 Directory Brute-forcing is a technique used to check a lot of paths on a web server to find hidden pages. Which is another name for this? (i) Local File Inclusion, (ii) dir busting, (iii) hash cracking. (目录暴力破解是一种用于检查 Web 服务器上的大…

pytorch 中 nn.ModuleList()使用说明

nn.ModuleList() 是 PyTorch 中的一个类&#xff0c;用于管理神经网络模型中的子模块列表。它允许将多个子模块组织在一起&#xff0c;并将它们作为整个模型的一部分进行管理和操作。 在神经网络模型的开发过程中&#xff0c;通常需要定义和使用多个子模块&#xff0c;例如不同…

leetcode代码记录(有效的字母异位词

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断它们是不是一组变位词&#xff08;字母异位词&#xff09;。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同且字符顺序…

【简单讲解下epoll】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

使用porgo研究多峰函数

研究多峰函数的全局极小点 多峰函数是具备多个局部极小点,并且在局部极小处梯度信息为0的函数。 pip install porgo基本准备 import numpy import porgo定义多峰函数 multimodal_function = lambda x: numpy.sum(x**2 - 10 * numpy.cos(2