Значение выхода 0, выхода 1 и выхода 2 в сценарии bash

Что еще вы могли бы сделать, is ls .?* Или ls .!(|), который покажет вам все в текущем каталоге скрытых файлов / директорий в верхней части и других файлах / каталогах ниже

, например: из моего terminal

$ ls .?*       
.bash_history    .dmrc        .macromedia   .weather
.bash_logout     .gksu.lock   .profile      .wgetrc
.bash_profile    .bashrc.save .ICEauthority .toprc           .Xauthority
.bashrc          .lastdir     .viminfo      .xsession-errors
.bashrc~         .dircolors   .lynxrc       .vimrc           .xsession-errors.old

..:
Baron

.adobe:
Flash_Player

.aptitude:
cache  config

.cache:
compizconfig-1                              rhythmbox
dconf                                       shotwell

Теперь обратите внимание на приведенные выше результаты, он показывает вам каждый файл / каталог с его субдирером и любыми скрытыми файлами прямо ниже.

[1:0:248][ebaron@37signals:pts/4][~/Desktop]
$ ls .!(|)
.bash_aliases  .bashrc1  .bashrc1~

..:
askapache-bash-profile.txt  examples.desktop             Public           top-1m.csv
backups             Firefox_wallpaper.png        PycharmProjects          top-1m.csv.zip
Desktop             java_error_in_PYCHARM_17581.log  Shotwell Import Log.txt  topsites.txt
Documents           Music                Templates            Videos
Downloads           Pictures                 texput.log           vmware

Извините, я не могу комментировать , чтобы объяснить разницу между ls .?* и @ cioby23 answer ls -d .[!.]* .??* И почему она на самом деле печатает скрытые файлы дважды, потому что буквально вы спрашиваете дважды .??*, .?*, .[!.]*, они - то же самое , поэтому добавление любого из них с разными командами будет печататься дважды.

1
задан 14 March 2017 в 14:18

2 ответа

Использование exit, а число - удобный способ передачи результатов вашего сценария. Он имитирует то, как команды bash выводят код возврата. С командами bash код возврата 0 обычно означает, что все выполнено успешно без ошибок. exit также заставляет ваш сценарий останавливать выполнение в этой точке и возвращаться в командную строку.

Любой код возврата больше 0 указывает на какую-либо ошибку, хотя иногда ошибка не является критичной для каждого команда [] d1]

Вы можете получить код возврата последней команды bash, используя переменную оболочки $?, например:

. ]
$ echo "something"
something
$ echo $?
0
$ cp
cp: missing file operand
Try 'cp --help' for more information.
$ echo $?
1

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

exit 2
exit 0

Является своего рода бессмысленным, поскольку вы никогда не сможете добраться до части exit 0.

19
ответ дан 23 May 2018 в 00:41

Все само по себе, exit подразумевает выходное значение нуля или успешное завершение вашего скрипта. Вам не нужно добавлять нулевой аргумент в команду exit, чтобы указать успешное завершение. Ваш скрипт может (или, вероятно, будет) успешно выйти, хотя он проверяет ошибочное состояние. В этом случае вы специально хотите, чтобы он вышел с условием ошибки (или 1).

echo -e "Enter numbers 1-4" \c"
read NUM
case $NUM in 
    1) echo "one";;
    2) echo "two";;
    3) echo "three";;
    4) echo "four";;
    *) echo "invalid answer"
       exit 1;;
esac

Команда exit в последней строке вовсе не обязательно должна быть там. Его можно было бы вызвать с нулевым или вообще не вызываемым. Без указания аргумента 1 для команды exit ответ во всех этих случаях на echo $? будет равен нулю.

Однако, указав аргумент 1 команде exit, ответ на echo $? будет 1. Итак, используйте аргумент 1 для команды exit, когда вы хотите указать, что сценарий вышел с условием ошибки.

3
ответ дан 23 May 2018 в 00:41

Другие вопросы по тегам:

Похожие вопросы: