Попробуйте это,
Время 2017-03-25 05:52:09.373941000
можно преобразовать в первый формат 24MAR17:00:14:09
и затем выполнить сравнение.
date_in="24MAR17:00:14:09"
date_out=`date +%d%b%y:%H:%M:%S -d "2017-03-25 05:52:09.373941000" | tr '[:lower:]' '[:upper:]'`
[ $date_in == $date_out ] && echo "The dates match"
Поскольку вы указали Linux, это можно сделать с помощью readlink -f /proc/$$/exe
. Это даст вам (на стандартном выходе )путь к оболочке, выполняющей ваш сценарий оболочки (что-то вроде/bin/bash
). Таким образом, вы можете назначить его переменной (по крайней мере в оболочке POSIX )с помощью var=$(readlink -f /proc/$$/exe)
.
$$
— pid текущей оболочки; /proc/«pid»/exe
— это функция ядра, которая позволяет вам запрашивать исполняемый файл, запущенный с заданным pid, в форме несколько «волшебной» символической ссылки. Таким образом, вы можете использовать readlink
, чтобы получить путь.
В системах, отличных от -Linux, вы должны иметь возможность использовать ps
, например, ps -o args= $$
, но это может привести к тому, что вместо этого вы получите имя сценария (POSIX допускает любое поведение ).
За исключением случаев, когда ваш сценарий предназначен для использования, например, для установки переменных в пользовательской оболочке, вам действительно следует использовать строку #!
вверху вместо того, чтобы указать, в какой оболочке его запускать.
Отдельный сценарий не должен проверять, в каком интерпретаторе он работает. Такой вид самоанализа неудобен и подвержен ошибкам, и, возможно, его придется реализовывать по-разному для разных Unices.
Например, сценарий Perl всегда можно с уверенностью предположить, что он интерпретируется интерпретатором Perl, сценарий Python всегда выполняется интерпретатором Python и так далее. Так почему бы сценарию bash
не предполагать, что он запускается bash
, а сценарию sh
— что он запускается /bin/sh
?
Тестирование конкретных возможностей текущего интерпретатора — это отдельная проблема, и, например. bash
предлагает $BASH_VERSION
и массив $BASH_VERSINFO
для проверки версии против (, например ).
Итак, как вы можете сделать, например,. сценарий bash
запускается с помощью bash
, а сценарий csh
запускается с помощью csh
? Ну, вы не позволяете пользователю выбирать переводчика.
Вы можете сделать это,
Отсутствие суффикса имени файла в файле скрипта,на случай, если это "запутает" пользователя. Сценарий bash
в файле myscript.sh
может заставить пользователя думать, что его можно запустить с помощью sh
. Вместо этого просто вызовите скрипт myscript
и...
Используйте строку#!
("shebang" или "hashbang" ).
Строка#!
-идет в самой первой строке скрипта (, два символа #!
должны быть первыми в файле )и указывают путь к используемому интерпретатору.
Сценарий bash
может иметь
#!/bin/bash
, если это путь к исполняемому файлу bash
в вашей системе, или если вы хотите, чтобы bash
загружался из любого места в $PATH
, где он находится в вашей системе,
#!/usr/bin/env bash
в качестве первой строки, например.
Это гарантирует, что он всегда будет интерпретироваться bash
, а не sh
, csh
, python
или каким-либо другим интерпретатором несвязанного языка.
Следующим шагом будет
chmod +x myscript
. Теперь вы можете запустить свой скрипт с помощью
./myscript
не беспокоясь о том, какой интерпретатор использовать для его выполнения. На самом деле, для пользователя сценария совершенно не имеет значения , был ли это сценарий bash
, сценарий Python или скомпилированный двоичный файл.