相关疑难解决方法(0)

在 Shell 算术评估中使用未经处理的数据的安全影响

在对最近问题评论中,Stéphane Chazelas 提到双括号算术存在安全隐患,例如:

x=$((1-$x))
Run Code Online (Sandbox Code Playgroud)

在大多数贝壳上。

我的谷歌技能似乎生疏了,我找不到任何东西。双括号算术的安全含义是什么?

shell security arithmetic

29
推荐指数
1
解决办法
1188
查看次数

对数组元素进行一元测试 -v

在 bash 中,带有一元测试的条件表达式-v myvariable测试变量是否myvariable已设置。请注意,myvariable不应通过在其前面加上美元前缀来扩展,因此不是 $myvariable。\n现在我发现对于数组元素,条件表达式-v myarray[index]也可以很好地工作,无需完整的扩展语法${myarray[$index]}。尝试这个:

\n
    myarray[2]=myvalue\n    for i in 1 2 3\n    do\n        [ -v myarray\\[i] ] && echo element $i is set\n    done\n
Run Code Online (Sandbox Code Playgroud)\n

(注意转义\\[以防止通配符,作为使用引号的替代方法)

\n

给出所需的输出:

\n
    element 2 is set\n
Run Code Online (Sandbox Code Playgroud)\n

问题\n这种行为可以安全使用吗?又名是这种已记录的行为吗?

\n

附录\n阅读答案后https://unix.stackexchange.com/a/677920/376817后,我扩展了我的示例:

\n
    myarray[1]=val myarray[2]=val myarray[3]=val myarray[4]=val myarray[5]=val myarray[6]="" myarray[2]=""\n    unset myarray[3] myarray[4] myarray[5]\n    touch myarray4 myarrayi\n    myarray4=val myarrayi=val\n
Run Code Online (Sandbox Code Playgroud)\n

然后

\n
    for …
Run Code Online (Sandbox Code Playgroud)

bash array test

8
推荐指数
1
解决办法
856
查看次数

检查一个字符串是否不止一次有一个字符

我想检查一个字符串是否不止一次包含一个字母(不是一个特定的字母,实际上是任何字母)。

例如:

用户:

test.sh this list
Run Code Online (Sandbox Code Playgroud)

脚本:

if [ "$1" has some letter more then once ]
then 
do something
fi
Run Code Online (Sandbox Code Playgroud)

shell bash text-processing

5
推荐指数
1
解决办法
4004
查看次数

批量重命名文件为顺序编号

我试图在我的 shell 中批量重命名一堆文件,即使互联网上有很多关于它的材料,我似乎无法找到适合我的特定情况的解决方案。

我有一堆具有(似乎是)“时间戳 ID”的文件:

abc_128390.png
abc_138493.png
abc_159084.png
...
Run Code Online (Sandbox Code Playgroud)

我想换一个柜台:

abc_001.png
abc_002.png
abc_003.png
...
Run Code Online (Sandbox Code Playgroud)

我(很多)天真的方法是这样的:

mv abc_*.png abc_{001..123}.png

另外,我想不出一种方法让它与for-loop 一起工作。

不幸的rename是,FWIW在这个特定系统上不可用。

任何建议将不胜感激!

shell bash shell-script rename

5
推荐指数
2
解决办法
1万
查看次数

使用 OR 门在单个 if 语句 shell 脚本中进行多字符串比较

我试图将存储在变量中的字符串与三个不同的字符串进行比较,如果它们都不匹配,则抛出错误。我尝试使用逻辑运算符 OR 在单个 if 语句中执行此操作。但是每次我收到错误时,即使存储在变量中的值与可能的值之一相同。请找到我尝试过的片段。

if [[ "$TYPE" != "LOCAL" || "$TYPE" != "REMOTE" || "$TYPE" != "BOTH" ]]; then
    echo -e "\n\tINCORRECT OR NULL ARGUMENTS PASSED. PLEASE VERIFY AND CORRECT THE USAGE MENTIONED AS BELOW: \n"
    Usage
    exit 1
fi


if [[ "$TYPE" != "LOCAL" ]] || [["$TYPE" != "REMOTE" ]] || [["$TYPE" != "BOTH" ]]; then
    echo -e "\n\tINCORRECT OR NULL ARGUMENTS PASSED. PLEASE VERIFY AND CORRECT THE USAGE MENTIONED AS BELOW: \n"
    Usage
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

bash shell-script

1
推荐指数
1
解决办法
1万
查看次数