Передавать аргументы командной строки скрипту bash

Я новичок в программировании сценариев bash.

Я хочу реализовать bash-скрипт «deploymLog», который принимает в качестве входного одного строкового аргумента (имя).

[root@localhost Desktop]# ./deploymLog.sh name 

здесь я хочу передать строковый аргумент (имя) через командную строку

В качестве начального шага мне нужно добавить текущую Logone.txt метку вместе с этой входной строкой в ​​файл журнала, например Logone.txt в текущем каталоге в следующем формате:

 [name]=[System time timestamp1] 

Как это возможно?

3 Solutions collect form web for “Передавать аргументы командной строки скрипту bash”

 $> cat ./deploymLog.sh #!/bin/bash name=$1 log_file="Logone.txt" if [[ -n "$name" ]]; then echo "$1=$( date +%s )" >> ${log_file} else echo "argument error" fi 

Первый аргумент из командной строки может быть основан на $1 . date +%s возвращает текущую временную метку во время unix. >> является оператором добавления записи в файл.

 $> ./deploymLog.sh tt $> cat Logone.txt tt=1329810941 $> ./deploymLog.sh rr $> cat Logone.txt tt=1329810941 rr=1329810953 

Для более читаемой временной метки вы можете играть с аргументами date .

Аргументы командной строки командной строки доступны через $1 (первый), $n (n) или $* (все аргументы), поэтому ваш скрипт должен начинаться:

 #!/bin/bash if [ $# -ne 1 ]; then echo $0: usage: myscript name exit 1 fi name=$1 

Теперь аргумент name доступен из сценария как $name .

Чтобы получить метку времени, используйте команду date(1) и дайте ей спецификатор формата, чтобы он выдавал желаемый формат:

 now=$(date +%Y%m%d%H%M%S) 

Теперь $now содержит текущую дату и время.

Таким образом, вы можете создать файл журнала таким образом:

 logfile=/path/to/log/file/mylogfile.$now echo "[$name]=[$now]" >> $logfile в logfile=/path/to/log/file/mylogfile.$now echo "[$name]=[$now]" >> $logfile 

Вам лучше использовать функцию оболочки для регистрации ваших сообщений, поскольку она будет проще в использовании:

 function logit { now=$(date +%Y%m%d%H%M%S) echo "$now: $*" >> $logfile } 

Обратите внимание, что функции оболочки получают доступ к своим собственным аргументам так же, как сценарий (через $1 и т. Д.),

Итак, исходный скрипт выглядит так:

 #!/bin/bash function logit { now=$(date +%Y%m%d%H%M%S) echo "$now: $*" >> $logfile } if [ $# -ne 1 ]; then echo $0: usage: myscript name exit 1 fi name=$1 now=$(date +%Y%m%d%H%M%S) logfile=/path/to/log/file/mylogfile.$now logit name = $name в #!/bin/bash function logit { now=$(date +%Y%m%d%H%M%S) echo "$now: $*" >> $logfile } if [ $# -ne 1 ]; then echo $0: usage: myscript name exit 1 fi name=$1 now=$(date +%Y%m%d%H%M%S) logfile=/path/to/log/file/mylogfile.$now logit name = $name 

(обратите внимание, что файл журнала не находится в точном формате, который вы указали, он находится в лучшем с меткой времени в начале каждой строки).

 #!/bin/bash name=$1 echo "$(date '+%Y%m%d-%H:%M:%S') => " $name >> x.log 

запустите «bash deploymLog.sh независимо», и вы получили x.log с

 20120220-23:53:50 => whatever 
  • Преобразование значений в строке по первому полю
  • Проверьте, является ли файл текстовым файлом в bash
  • Является ли наложение псевдослучайной команды на ядро?
  • Как переименовать файл в сценарии bash один за другим
  • термальные нагрузки IP из текстового файла
  • Инициализация локальной переменной Bash
  • Условно-экспортная переменная командной строки
  • Запустить скрипт в качестве другого пользователя
  • Как использовать / отправлять сигналы в командной строке для любой программы (например, dd)
  • получить части строки, используя сценарий оболочки
  • Как проверить, нет ли моей переменной в наборе?
  • Linux и Unix - лучшая ОС в мире.