Как bash
сценарий:
#!/bin/bash
i=1
while [ -f "log${i}.txt" ]; do
((i++))
done
echo "log${i}.txt"
Цикл while -увеличивает переменную $i
до тех пор, пока существует файл log${i}.txt
. echo
выводит несуществующее -имя файла со следующим номером.
Поскольку вы упомянули Bash, перевод cd
на ассемблер можно выполнить следующим образом:
git://git.savannah.gnu.org/bash.git
cd bash
./configure
make
cd builtins
./mkbuiltins -D. cd.def
gcc -S -DHAVE_CONFIG_H -DSHELL -I. -I.. -I.. -I../include -I../lib -I. -g -O2 -Wno-parentheses -Wno-format-security cd.c
Вы найдете соответствующий язык ассемблера в builtins/cd.s
. (Вам потребуется установить ряд инструментов разработки; как это сделать, зависит от вашего дистрибутива, и ./configure
подскажет, чего не хватает.)
Сомневаюсь, что это будет очень полезно, особенно для новичков в программировании.
Чтобы выполнять команды оболочки высокого уровня, вам нужна сложная программа, оболочка.
Никакой ассемблерный или машинный код не изменит текущий каталог процесса, если только это не последовательность инструкций, вызывающая ядро. Ядро — это еще более сложное программное обеспечение, чем оболочка, и в выполнении chdir
нет ничего простого, опять же есть уровни абстракции файловой системы.
В общем, ассемблер или машинный код мало что дают, особенно новичкам в программировании.