Получите для себя 7-е издание Руководства программиста Unix (том 1) и запрограммируйте в нотацию оболочки (Bourne), описанную там. Вы можете фактически перейти на оболочку System V (Bourne), если найдете соответствующее руководство; у него есть несколько дополнительных функций, таких как функции, которых не было в оболочке 7-го издания, и они практически доступны везде. (Это очень консервативная позиция, но она даст вам максимальную переносимость.)
Другая проблема заключается в выборе используемых вами команд и опций, которые вы используете для этих команд. Например, GNU grep имеет множество полезных опций, которые недоступны в других местах. GNU sed также имеет расширения, недоступные в других местах. Если вы напишите свой сценарий оболочки для использования этих расширений, ваш код будет непереносимым, даже если все оболочки будут правильно понимать синтаксис.
Я рекомендую знать, что стандарт POSIX является портативным. Большинство функций POSIX обычно поддерживаются большинством систем, но каждая система обычно добавляет некоторые дополнительные опции и функции, которые не всегда широко доступны. Обратите внимание, что оболочка POSIX имеет некоторые особенности, в частности, $(...)
подстановка команд вместо обратных тиков, которых вы не имели в исходных оболочках Bourne. Вам придется решить, стоит ли ясность, которую приносит более современная нотация, (номинальной) потери переносимости.
Кроме того, правила оболочки Autoconf сосредоточены на максимальной переносимости. Однако в результате получается довольно неестественная версия сценариев оболочки, не в последнюю очередь потому, что она должна взаимодействовать с макропроцессором m4
, что приводит к некоторым дополнительным ограничениям.
Обратите внимание, что по существу невозможно написать переносимые сценарии оболочки, которые будут работать с семейством оболочек Bourne / Korn / POSIX и семейством C Shell. Есть сильных аргументов для заключения "вы не должны писать скрипты в оболочке C".