Как сделать “если не” в Bash без теста?

К (ре) создают файловую систему, используют одно из mkfs семейства инструментов. Выберите тот на основе того, какую файловую систему Вы хотите; наиболее распространенные:

  • FAT32 (mkfs.vfat) для максимальной совместимости. FAT32 не имеет никакого понятия принадлежности файла или полномочий или символьных ссылок или многих других unixy понятий, просто файлы и каталоги со многими знаками пунктуации, запрещенными в именах файлов и никакой чувствительности к регистру. Максимальный размер файла составляет 4 ГБ. Выберите эту файловую систему, если просто необходимо сохранить набор файлов, которые не больше, чем 4 ГБ.
  • NTFS для совместимости с Windows. Поддерживается большинство основных unixy функций. Поддержка NTFS под операционными системами кроме Windows имеет тенденцию быть немного облупленной, поэтому выберите эту файловую систему, только если Вам нужны совместимость Windows и большие файлы.
  • ext4 является фактической стандартной файловой системой Linux. Выберите это при необходимости в unixy функциях, таких как символьные ссылки и полномочия.
  • ext2 является более старой версией ext4 (испытывающий недостаток в функциях, таких как журнал и хорошая поддержка каталогов с тысячами файлов) и поддерживается большим количеством систем Unix, чем ext4 (но не надеются на чудеса в соответствии с Windows). Выберите это при необходимости в хорошей поддержке в BSD и по крайней мере поддержке только для чтения в соответствии с Windows.

Необходимо будет узнать название устройства, что диск включен. В соответствии с Linux, съемные диски обычно имеют имена как /dev/sda, /dev/sdb, и т.д. обязательно выберите правильный, или Вы могли бы стереть свой жесткий диск. В соответствии с Linux, можно получить список доступных дисков и их разделов путем выполнения cat /proc/partitions; число в третьем столбце является размером в килобайтах. Можно также понять то, где диск включается путем рассмотрения имен в /dev/disk/by-path, и модели диска в /dev/disk/by-id. Карты флэш-памяти обычно имеют единственный раздел, пронумерованный 1.

Во многих системах эти инструменты живут в /sbin или /usr/sbin, который не находится в пути по умолчанию для некорневых пользователей. Кроме того, Вы будете должны, вероятно, быть корнем для выполнения их.

Для создания новой файловой системы работайте mkfs команда на правильном устройстве:

mkfs.TYPE /dev/NAME_OF_DEVICE

Не забудьте помещать правильное число раздела. Если Вы запускаете Linux, и у Вас есть единственный жесткий диск и никакой другой подключенный внешний диск, устройство обычно /dev/sdb1. Таким образом типичная команда

sudo mkfs.vfat /dev/sdb1      # be sure to adjust the device name if necessary

mkfs оставит некоторые фрагменты старых данных на месте, которые не будут стерты, пока они не будут перезаписаны новым файлом. Эти фрагменты могут быть восстановлены путем рассмотрения содержания устройства, обхода файловой системы. (Нет никакой гарантии, что будет легко восстановить значимые данные из фрагментов, не надейтесь использовать это в качестве отмены для oops-I-formatted-the-wrong-device.), Если Вы хотите стереть все существующие данные, выполните следующую команду прежде mkfs:

tee 

Сделайте очень очень уверенными, что Вы выбираете правильное имя устройства, поскольку это сотрет все данные без надежды на восстановление.

Обратите внимание, что, в то время как это сотрет данные без возможности восстановления обычными средствами программного обеспечения, это может уехать, трассировки позади этого могут быть восстановлены с некоторой электронной работой. Посмотрите, что достаточно только вытереть флеш-накопитель однажды?. Единственный совместимый паранойей способ стереть данные по флеш-накопителю состоит в том, чтобы зашифровать его во-первых и уничтожает все копии ключа.

1
06.06.2013, 14:52
4 ответа

if myfunction "two" в псевдокоде if the myfunction return code is zero when run with a single argument "two". Если Вы хотите инвертировать сравнение (is not zero) можно просто добавить a ! между if и myfunction.

2
27.01.2020, 23:29
  • 1
    Это работает отлично - за исключением того, что $? изменяется также. Но это - то, как система работает, я предполагаю... –  Den 06.06.2013, 13:57
  • 2
    @Den Да, $? всегда содержит результат последней команды. Вы, как предполагается, сохраняете его к некоторой другой переменной, если Вы хотите сохранить результат определенной команды на потом. Примечание –  a CVn 06.06.2013, 14:51
  • 3
    @Den это if ...; then ... может быть переписан как ...; if $? = 0; then ... для игнорируемых частей в том же порядке. Это может быть больше в соответствии с тем, что Вы хотите сделать, потому что затем у Вас есть хорошее место, в котором можно сохранить значение $? к где-то в другом месте. –  a CVn 06.06.2013, 14:53
  • 4
    , право, глупое я. –  a CVn 06.06.2013, 15:00
  • 5
    Обратите внимание, что это "реверсирование" кода выхода включает некоторую информационную потерю: Вместо значения от 0 до 255 Вы доберетесь или 0 или 1. –  l0b0 06.06.2013, 15:16
myfunction "two"
myvar=$?
if [ $myvar -gt 0 ]; then
 echo yep $myvar
else
 echo nope $myvar
fi
0
27.01.2020, 23:29

Не совсем уверенный, что Вы спрашиваете, но:

myfunction two; (( $? == 2 )) && echo yes || echo no
1
27.01.2020, 23:29

Почему бы не повторение из функции? Это должно быть просто:

myfunction() {
    case "$1" in 
        one) echo "nope 0" ;;
        two) echo "yep 2" ;;
    esac
}
myfunction one
myfunction two
0
27.01.2020, 23:29
  • 1
    Повторение только для иллюстрирования примера. Реальный сценарий только о если... –  Den 06.06.2013, 13:53

Теги

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