linux – bash脚本中的错误替换

我正在尝试让脚本工作以将交换空间添加到VPS,作为一种解决方法,我认为我已经使用它但是现在,每次我收到错误:fakeswap.sh:5:每次尝试时都会有错误的替换如此执行:sudo sh fakeswap.sh.

以下是我的代码

#!/bin/bash

SWAP="${1:-512}"

NEW="$[SWAP*1024]"; TEMP="${NEW//?/ }"; OLD="${TEMP:1}0"

umount /proc/meminfo 2> /dev/null
sed "/^Swap\(Total\|Free\):/s,$OLD,$NEW," /proc/meminfo > /etc/fake_meminfo
mount --bind /etc/fake_meminfo /proc/meminfo

free -m

很明显,似乎失败的替代是在线:NEW =“$[SWAP * 1024]”; TEMP =“${NEW //?/}”; OLD = “${TEMP:1} 0”

我有点惭愧地说我真的不明白应该在那条线上发生什么(除了我们似乎在某种程度上声明变量都是SWAP的衍生物之外).我收集下面的行代替新的常量到一个虚拟配置文件(缺少一个更好的术语)但我不知道如何定义变量TEMP和OLD.

无论如何,我想知道是否有人能够看到为什么这种替换不起作用……甚至可能帮助我理解TEMP和OLD定义时可能会发生什么?

提前谢谢了!

解决方法:

sh不是bash. sh shell无法识别某些有效的bash替换.

该脚本的目的是它是可执行的.你会这样做的

chmod a+x fakeswap.sh

之后你可以通过输入来运行它

./fakeswap.sh

(假设它在当前工作目录中;如果不在,则使用完整路径.)

顺便说一句,TEMP是一个等于NEW长度的空格,OLD是将TEMP中的最后一个空格改为0的结果.所以OLD和NEW具有相同的长度,这意味着sed替换不会改变文件的大小.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...