Внутренняя команда «let» не работает в сценарии оболочки? - PullRequest
7 голосов
/ 20 июня 2011

Я сделал

a=1234 
let "a=a+1"

в командной строке, и это нормально. Но когда я делаю то же самое в сценарии оболочки. Он выводит ошибку «let: not found». Вот файл сценария.

#!/bin/sh
a=1234;
let "a=a+1";
echo "$a";

Спасибо

Ответы [ 8 ]

10 голосов
/ 26 ноября 2014

Не использовать let. Используйте арифметическое расширение POSIX : a=$(($a+1)). Это гарантированно работает в любой POSIX-совместимой оболочке.

7 голосов
/ 30 июня 2011

Вероятно, проблема в том, что /bin/sh отличается от обычной оболочки или не ведет себя так же. Например, когда bash вызывается как /bin/sh, он предоставляет подмножество своих обычных функций.

Итак, вам может понадобиться изменить строку shebang, чтобы использовать другую оболочку:

#!/bin/bash

или

#!/bin/ksh

Вам не нужны точки с запятой на концах строк.

3 голосов
/ 21 июля 2012

См .: http://www.hlevkin.com/Shell_progr/hellobash.htm

Правильно:

a=1234;
b=1;
a=`expr $a + $b`;
2 голосов
/ 11 октября 2012

Вы должны использовать let a=a+1 без кавычек

1 голос
/ 20 июня 2011

Это '$ a' из '$ a = 1234' убивает вас.

Оболочка выполняет все $ подстановки, а затем вычисляет выражение. В результате он увидел «= 1234», потому что не было значения $ a.

Используйте -x, чтобы увидеть это.

  bash -x your-script
0 голосов
/ 03 апреля 2017
  1. Проверьте имя оболочки, используя

    echo $SHELL

  2. Измените первую строку сценария соответственно на

    #!/bin/bash

    или

    #!/bin/ksh

    вместо #!/bin/sh.

0 голосов
/ 15 октября 2016
c=1
d=1
for i in `ls`
do
    if [ -f $i ]
    then
        echo "$c -> $i"
        c=`expr $c + 1`
    fi
done
c=`expr $c - 1`
echo no. of files $c
for i in `ls`
do
    if [ -d $i ]
    then
        echo "$d -> $i"
        d=`expr $d + 1`
    fi
done
d=`expr $d - 1`
echo no. of direcrories $d
0 голосов
/ 30 июня 2011

Проверьте фактическую оболочку с помощью следующей команды в командной строке:

echo $ SHELL

Она предоставит имя оболочки, используйте ее вместо / bin/ sh в первой строке вашего скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...