AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-931449

fma abd's questions

Martin Hope
fma abd
Asked: 2019-06-09 06:12:44 +0800 CST

根据变量的动态值构造脚本参数

  • 5

团队,我有一组在此脚本 A 中定义的参数,它们的默认值为“DEFAULT”。当用户将这些变量参数设置为“DEFAULT”以外的任何值时,我必须运行另一个具有更新变量值的脚本,否则我将运行另一个具有默认值的脚本-B。所以,我有三种情况

我在脚本中模拟詹金斯参数设置。默认值是在设置为环境变量的 jenkins 作业上预设的,然后运行此脚本。因此,如果用户不更改任何参数并将所有 fio_gen 的值设置为默认值,那么它们将被我在脚本中定义的值替换。

1-Run Script-B with DEFAULT variable values
2-Run Script-B with all-non-DEFAULT variable values
3-Run Script-B with mixed variable values.. some default and some non. 

我的代码在下面,它确定哪些变量是默认变量而不是默认变量,但我想不出为上面的混合做 case-3 的逻辑。

我应该在 vars_ioengine_defaults 中使用关联数组并进行比较和使用吗?或者什么是好的方法?

#!/bin/bash
declare -a vars=(IOEngine TestType Threads BlockSize FileSize DatasetSize QueueDepth RunTime UDCName)
for var_name in "${vars[@]}"
do
 if [ -z "${!var_name}" ]; then
   echo "Missing environment variable $var_name"
   exit 1
 fi
done

#***Comment unComment to test 3 cases"
#DatasetSize="DEFAULT"
#BlockSize="DEFAULT"
#DatasetSize="nonDEFAULT"
#BlockSize="nonDEFAULT"
DatasetSize="DEFAULT"
BlockSize="NON-DEFAULT"


preset="DEFAULT"
declare -a dynamic_vars=( DatasetSize BlockSize )

number_of_dynamic_vars="${#dynamic_vars[@]}"
number_of_default_values=0

overwrite_all() {
        printf "all non-defaults variables\n"
    fio_gen
}
overwrite_some() {
        printf "some defaults variables\n"
    for [[ "${!var}" == "$preset" ]]
    do
     # SOME LOGIC HERE TO replace non-default and call this function
    fio_gen
    done
}
overwrite_none() {
        printf " all defaults variables\n"
    vars_ioengine_defaults
    fio_gen
}


check_vars() {
for var in "${dynamic_vars[@]}"
do
  [[ "${!var}" == "$preset" ]] && ((number_of_default_values++))
done

if [[ "$number_of_default_values" -eq 0 ]]; then
  echo "None var is default"
  overwrite_all
elif [[ "$number_of_default_values" -eq "$number_of_dynamic_vars" ]]; then
  echo "All defaults"
  overwrite_none
else
  echo "Mixed"
  overwrite_some
  echo $var
fi
}

vars_ioengine_defaults() {
  RunTime="0"
  UDCNAme="stage"
if [[ "$IOEnginge" == "psync" ]]  && [[ "$TestType" == "read" ]]; then
  QueueDepth="0"
  DatasetSize="3G"
  BlockSize="2,4,8,16,32,64,128,256,512,1024"
  Threads="1,2,4,8,16,32,64,128,256"
  FileSize="3M"
elif [[ "$IOEngine" == "psync" ]]  && [[ "$TestType" == "randread" ]]; then
  QueueDepth="0"
  DatasetSize="1G"
  BlockSize="8,16,32"
  Threads="16,32,64,128,256"
  FileSize="32k"
elif [[ "$IOEngine" == "libaio" ]]  && [[ "$TestType" == "read" ]]; then
  QueueDepth="16"
  DatasetSize="3G"
  BlockSize="2,4,8,16,32,64,128,256,512,1024"
  Threads="1,2,4,8,16,32,64,128,256"
  FileSize="3M"
elif [[ "$IOEngine" == "libaio" ]]  && [[ "$TestType" == "randread" ]]; then
  QueueDepth="16"
  DatasetSize="1G"
  BlockSize="8,16,32"
  Threads="16,32,64,128,256"
  FileSize="32k"
fi
}

fio_gen() {
    echo "iteratre on -p $IOEngine -t $TestType -j $Threads -b $BlockSize -s $FileSize -d $DatasetSize -q $QueueDepth -r $RunTime -u $UDCName"
}
check_vars
bash array
  • 2 个回答
  • 274 Views
Martin Hope
fma abd
Asked: 2019-06-04 14:52:02 +0800 CST

变量名存储在 bash 数组中;如何遍历数组并根据常见模式测试它们的值?

  • 5

团队,

我正在尝试实现一种功能,该功能由用户检查 ENV 中预定义变量列表中所有变量的内容,然后使用所有结果变量作为参数运行我的函数。

所以,有3种可能性:

1 - All variables hold same value 
[DatasetSize & BlockSize == DEFAULT ]

2 - All variables hold unique value 
[DatasetSize & BlockSize != DEFAULT ]

3 - Some are unique and some distinct. 
[DatasetSize || BlockSize = DEFAULT ]

我的代码在下面适用于案例 1 和案例 2,但不适用于案例 3。对于第三种情况,当任何变量具有“DEFAULT”时,它只执行第二个 elif 而不是第三个。

#!/bin/bash
#exit on fail without running next command
set -eo pipefail

export TestType="read"
export IOEngine="psync"
export DatasetSize="DEFAULT"
export BlockSize="NON-DEFAULT"

preset="DEFAULT"
declare -a static_vars=(TestType IOEngine)
declare -a dynamic_vars=(DatasetSize BlockSize )
declare -a vars=(TestType IOEngine DatasetSize BlockSize)

for var_name in "${vars[@]}"
do
  if [ -z "$(eval "echo \$$var_name")" ]; then
    echo "Missing environment variable $var_name"
    exit 1
  fi
done

overwrite_all() {
    printf "all defaults in func\n"
}
overwrite_some() {
    printf "some defaults in func\n"
}
overwrite_none() {
    printf " none defaults in func\n"
}
overwrite() {
    #not sure how to overwrite only those vars that have nonDEFAULT value.
    export DatasetSize="changed"
    export BlockSize="changed"
    echo "DatasetSize=$DatasetSize BlockSize=$BlockSize"
}
if [[ "$IOEngine" == "psync"  && ( "$TestType" == "read" || "$TestType" == "randread" ) ]]; then
    iter=1
    while [ $iter -lt 2 ]
    do
        echo "all are defaults; being to call your script with these parameters"
        echo $var_name
        if [[ ${dynamic_vars[@]} == $preset ]]; then
            echo "calling over_none"
            overwrite_none
        elif [[ ${dynamic_vars[@]} != "DEFAULT" ]]; then
            echo "calling over_all"
            overwrite_all
            overwrite
        elif [[ $DatasetSize == "DEFAULT" || $BlockSize == "DEFAULT" ]] && [[ $DatasetSize != "DEFAULT" && $BlockSize != "DEFAULT" ]]; then
                echo "calling over_some"
                overwrite_some
                overwrite
            else
            echo "done"
        fi
            iter=$[$iter+1]
        done
    else
        echo "ITengine not found"
    fi
    echo "out of loop"

输出:

calling over_all
all non-defaults in func
Data setSize=changed BlockSize=changed
out of loop

期望输出:

some defaults in func
DatasetSize=changed BlockSize=changed
bash array
  • 1 个回答
  • 667 Views
Martin Hope
fma abd
Asked: 2019-06-01 14:48:31 +0800 CST

bash 条件构造没有按预期工作

  • 5

我正在尝试查看 3 个变量是否具有相同的值 [DEFAULT],如果不是,我想执行其他功能。以下脚本中的所有变量都导出到系统环境。

#!/bin/bash
if [[ "$IOEngine" == "psync"  && ( "$TestType" == "read" || "randread" ) ]] && [[ ( "$DatasetSize" && "$BlockSize" && "$Threads" == "DEFAULT" ) ]]; then
    echo "all variables are Using DEFAULT"

elif [[ $IOEngine == "libaio"  && ( $TestType == "read" || "randread" ) ]] && [[ ( $DatasetSize || $BlockSize || $Threads || $FileSize || $RunTime == $preset ) ]]; then
   echo "all variables are Using DEFAULT"

else
    echo "one of the params is NON_DEFAULT"
    exit 1
fi

当我

"export DatasetSize=non_DEFAULT", 

输出不是在执行 else 构造,而是在执行块本身。

输出:

all variables are Using DEFAULT

预期的:

one of the params is NON_DEFAULT
bash
  • 2 个回答
  • 129 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve