Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bad substitution in bash script

Tags:

linux

bash

sh

I'm trying to get a script working to add swap space to a VPS, as a workaround a la this method. I thought I had it working but now, each time I get the error: fakeswap.sh: 5: Bad substitution whenever I try to execute it thusly: sudo sh fakeswap.sh.

Below is my code:

#!/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

Clearly the substitution that seems to be failing is on the line: NEW="$[SWAP*1024]"; TEMP="${NEW//?/ }"; OLD="${TEMP:1}0"

I'm somewhat ashamed to say that I don't REALLY understand what's supposed to happen on that line (apart from the fact that we seem to be declaring variables that are all derivatives of SWAP in one way or another). I gather that the lines below substitute new constants into a dummy configuration file (for lack of a better term) but I don't get how the variables TEMP and OLD are being defined.

Anyway, I was wondering if anyone might be able to see why this substitution isn't working...and maybe even help me understand what might be be happening when TEMP and OLD are defined?

Many thanks in advance!

like image 584
neanderslob Avatar asked Jan 11 '23 22:01

neanderslob


1 Answers

sh is not bash. The sh shell doesn't recognize some valid bash substitutions.

The intention of that script is that it be executable. You would do that by

chmod a+x fakeswap.sh

after which you can run it simply by typing

./fakeswap.sh

(assuming it is in the current working directory; if not, use the full path.)

By the way, TEMP is a number of spaces equal to the length of NEW and OLD is the result of changing the last space in TEMP to 0. So OLD and NEW have the same length, meaning that the sed substitution won't change the size of the file.

like image 100
rici Avatar answered Jan 21 '23 14:01

rici