Bash-скрипты — как проверить, существует ли файл
В этой статье мы напишем bash-скрипт для проверки существования файлов.
Синтаксис:
- тест [выражение]
- [ выражение ]
- [[ выражение ]]
Здесь в выражении пишем параметр и имя файла . Давайте посмотрим на некоторые параметры, которые можно использовать в выражении: –
- – f: возвращает True, если файл существует как обычный (обычный) файл.
- -d : возвращает True, если каталог существует.
- -e : возвращает True, если существует файл любого типа.
- -c : возвращает True, если файл символов существует.
- -r : возвращает True, если существует читаемый файл.
- – w : возвращает True, если существует файл, доступный для записи .
- -x : возвращает True, если исполняемый файл существует.
- -p : возвращает True, если файл существует в виде канала.
- -S : возвращает True, если файл существует как сокет.
- -s : возвращает True, если файл существует и размер файла не равен нулю.
- -L : возвращает True, если файл символической ссылки существует .
- -g : возвращает True, если файл существует и установлен флаг идентификатора группы удержания.
- -G : возвращает True, если файл существует и содержит тот же идентификатор группы, что и в процессе.
- -k : возвращает True, если файл существует и установлен флаг sticky bit.
Теперь есть еще несколько параметров для сравнения двух файлов.
- -ef: возвращает True, если оба файла существуют и указывают на один и тот же файл.
Пример :
FirstFile -ef SecondFile
- -nt: возвращает True, если FirstFile новее, чем Secondfile.
Пример :
FirstFile -nt FileOld
- -ot: возвращает True, если FirstFile старше, чем SecondFile.
Пример:
FirstFile -ot SecondFile
Давайте возьмем несколько примеров на основе синтаксиса:
- [выражение]: сначала создайте файл с именем «FirstFile.sh» и напишите в нем следующий скрипт
#!/bin/bash # using [ expression ] syntax and in place # of File.txt you can write your file name if [ -f "File.txt" ]; then # if file exist the it will be printed echo "File is exist" else # is it is not exist then it will be printed echo "File is not exist" fi
Теперь сохраните и запустите файл, используя следующую команду
$ chmod +x ./FirstFile.sh $ ./FirstFile.sh
Выход :
Примечание. Поскольку файл «File.txt» присутствует в системе. Итак, он напечатал «Файл существует».
- test [выражение]: теперь измените приведенный выше скрипт в «FirstFile.sh» следующим образом.
#!/bin/bash # using test expression syntax and in place # of File2.txt you can write your file name if test -f "File2.txt" ; then # if file exist the it will be printed echo "File is exist" else # is it is not exist then it will be printed echo "File is not exist" fi
Теперь снова сохраните и запустите файл, используя следующую команду
$ chmod +x ./FirstFile.sh $ ./FirstFile.sh
Выход :
Примечание. Поскольку «File2.txt» отсутствует в системе. Итак, он напечатал «Файл не существует».
- [[выражение]]: снова измените приведенный выше скрипт в «FirstFile.sh» следующим образом.
#!/bin/bash # using [[ expression ]] syntax and in place # of File3.txt you can write your file name if test -f "File3.txt" ; then # if file exist the it will be printed echo "File is exist" else # is it is not exist then it will be printed echo "File is not exist" fi
Теперь снова сохраните и запустите файл, используя следующую команду
$ chmod +x ./FirstFile.sh $ ./FirstFile.sh
Выход :
Примечание. Поскольку файл «File3.txt» присутствует в системе. Итак, он напечатал «Файл существует».
Давайте посмотрим на пример, основанный на параметрах:
- Используя параметр -d: создайте файл с именем «FirstDir.sh». » и пишем в нем следующий скрипт
!/bin/bash if [[ -d "GFG_dir" ]] ; # Here GFG_dir is directory and in place of GFG_dir you can write your Directory name then echo "Directory is exist" # If GFG_dir exist then it will be printed else echo "Directory is not exist" # If GFG_dir is not exist then it will be printed fi
Теперь сохраните и запустите файл, используя следующую команду
$ chmod +x ./FirstDir.sh $ ./FirstDir.sh
Выход :
Примечание. Поскольку в системе присутствует «GFG_dir». Итак, он напечатал «Каталог существует».
Точно так же вы можете использовать -f , -e , -w , -r , -c и т. д. (в соответствии с их использованием) вместо -d для проверки существования различных типов файлов.
Давайте посмотрим на пример, основанный на сравнении двух файлов:
- Использование параметра -nt
Создайте имя файла «Comparison_File.sh» и напишите следующий скрипт
#!/bin/bash # New_file.txt and Old_File.txt are names of two files. if [[ "New_File.txt" -nt "Old_File.txt" ]] ; then # This will be printed if Condition is true echo "New_File.txt is newer than Old_File.txt" else # This will be printed if Condition is False echo "New_File.txt is not newer than Old_File.txt" fi
Теперь сохраните и запустите файл, используя следующую команду
$ chmod +x ./Comparison_File.sh $ ./Comparison_File.sh
Выход :
Примечание. Поскольку оба файла присутствуют в системе, а «New_File.txt» новее, чем «Old_File.txt». “
Давайте посмотрим на пример «Проверить, не существует ли файл»:
Создайте файл с именем «Check_Exist.sh». » и пишем в нем следующий скрипт
#!/bin/bash # using ! before -f parameter to check if # file does not exist if [[ ! -f "GFG.txt" ]] ; then # This will printed if condition is True echo "File is not exist" else # This will be printed if condition if False echo "File is exist" fi
Теперь сохраните и запустите файл, используя следующую команду
$ chmod +x ./Check_Exist.sh $ ./Check_Exist.sh
Выход :
Примечание. «GFG.txt» отсутствует в системе. Итак, он напечатает «Файл не существует»
Давайте посмотрим на пример без использования условия If-else:
Создайте файл с именем «Geeks_File.sh» и напишите в нем следующий скрипт
#!/bin/bash # If File exist then first statement will be # printed and if it is not exist then 2nd # statement will be printed. [ -f "GFG_File.txt" ] && echo "File is exist" || echo "File is not exist"
Теперь сохраните и запустите файл, используя следующую команду
$ chmod +x ./Geeks_File.sh $ ./Geeks_File.sh
Выход :
Примечание. Поскольку файл «GFG_File.txt» присутствует в системе. Итак, он напечатал «Файл существует».