Próbuję losowo wybrać jeden z dwóch wyników w sh

#!/bin/sh
if [$[ $RANDOM % 2] -eq 1 ]
then
echo yes
else
echo no
fi

Daje

sh-3.2$ sh test.sh
test.bash: line 4: [1: command not found
no

Oczywiście próbuje wykonać (0,1) jako polecenie. Co ja robię źle?

0
user606723 21 lipiec 2011, 21:11

3 odpowiedzi

Najlepsza odpowiedź

Po prostu wstaw spację po pierwszym [, np.

#!/bin/sh
if [ $[ $RANDOM % 2] -eq 1 ]
then
echo yes
else
echo no
fi
4
marcelog 21 lipiec 2011, 21:15
Uh... to $[ $RANDOM % 2] wydaje się nieco niekonwencjonalne, ale nadal... dlaczego nie... zrobi to. :)
 – 
filippo
21 lipiec 2011, 21:23

Tutaj kolego, po prostu przegapiłeś składnię trochę :

#!/bin/sh
if [[ $((RANDOM % 2)) -eq 1 ]] ; then
    echo "yes"
else
    echo "no"
fi

Teraz, jeśli chcesz zaimponować znajomym, możesz spróbować tylko to:

[[ $((RANDOM % 2)) -eq 1 ]] && echo "yes" || echo "no"

Przy okazji, najlepsze praktyki i przewodniki, gorąco polecam tę książkę internetową: Advanced Bash-Scripting Guide

Twoje zdrowie!

2
glenn jackman 21 lipiec 2011, 22:38

Jeśli używasz bash, możesz użyć ((expression)) format:

#! /bin/sh
if ((RANDOM%2==1)); then
    echo yes
else
    echo no
fi
0
kamae 21 lipiec 2011, 21:28
Zdawałem sobie z tego sprawę, ale chciałem, żeby to było przenośne.
 – 
user606723
21 lipiec 2011, 23:02