First of all, I have read many posts (see at bottom) with if-clauses to search in a file for a specific string and followed these posts 1to1, however I don't manage to get my script to work. I want to make an entry in /etc/fstab
if it doesn't exist yet:
#!/bin/bash
fstab=/etc/fstab
if grep -q "poky-disc" "$fstab"
then
echo "#poky-disc" >> /etc/fstab
echo "/dev/sdb1 /media/poky ext4 defaults 0 2" >> /etc/fstab
else
echo "Entry in fstab exists."
fi
Thanks for your help in advance. These are the similar posts, which didnt help me further:
Here's a simple and hopefully idiomatic solution.
grep -q 'init-poky' /etc/fstab ||
printf '# init-poky\n/dev/sdb1 /media/poky ext4 defaults 0 2\n' >> /etc/fstab
If the exit status from grep -q
is false
, execute the printf
. The ||
shorthand can be spelled out as
if grep -q 'ínit-poky' /etc/fstab; then
: nothing
else
printf ...
fi
Many beginners do not realize that the argument to if
is a command whose exit status determines whether the then
branch or the else
branch will be taken.
Elegant and short way:
#!/bin/bash
if ! grep -q 'init-poky' /etc/fstab ; then
echo '# init-poky' >> /etc/fstab
echo '/dev/sdb1 /media/poky ext4 defaults 0 2' >> /etc/fstab
fi
It uses native Bash command exit code ($?=0 for success and >0 for error code) and if grep produces error, means NOT FOUND, it does inverse (!) of result, and adds fstab entry.
I had the same issue. I managed to edit it with this command:
sudo su -c "echo '#test' >> /etc/fstab"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With