Я пытаюсь написать программу с параметрами и аргументами вроде этого:
./program.sh -f <filename> -string <string>
Предполагается, что программа должна выводить строку <filename>, которая начинается с <string> следующим образом: [ ! d1] grep ^<string> <filename>
Плюс, предполагается, что в следующий примерный входной файл возвращается некоторая информация, связанная со строкой, например имя и возраст:
string name age sex
Akdk john 22 male
Jrtkfp miah 26 female
Как я могу добиться такого поведения ?
Операция, простая, как это может быть сделано с помощью oneliner, для этого вам не нужен целый скрипт. Я бы воспользовался функцией, которую вы можете поместить в свой файл ~/.bash_aliases, чтобы он загружался в каждый открываемый вами терминал.
function_name(){ awk /^$2/'{print $1": "$2", "$3}' $1 ;}
Это позволяет вам вызвать function_name <filename> <string> и получить результат как как показано ниже:
$ cat test
string name age sex
Akdk john 22 male
Jrtkfp miah 26 female
$ function_name test Akdk
Akdk: john, 22
Как вы можете видеть, вы можете достичь этой цели без каких-либо опций, использование только аргументов намного проще. Если вам как-то нужны варианты, я рекомендую этот учебник и эту статью.
NB: Например $1 имеет другое значение для bash (что работает с вашим терминалом), как и для awk: первый расширяет его до первого аргумента, который вы ему дали, второй интерпретирует его как ярлык для первого столбца. Вот почему нам нужны одинарные кавычки (') вокруг команды awk print, таким образом bash не разворачивает $1, но позволяет ему не смотреть на awk для разбора.
Операция, простая, как это может быть сделано с помощью oneliner, для этого вам не нужен целый скрипт. Я бы воспользовался функцией, которую вы можете поместить в свой файл ~/.bash_aliases, чтобы он загружался в каждый открываемый вами терминал.
function_name(){ awk /^$2/'{print $1": "$2", "$3}' $1 ;}
Это позволяет вам вызвать function_name <filename> <string> и получить результат как как показано ниже:
$ cat test
string name age sex
Akdk john 22 male
Jrtkfp miah 26 female
$ function_name test Akdk
Akdk: john, 22
Как вы можете видеть, вы можете достичь этой цели без каких-либо опций, использование только аргументов намного проще. Если вам как-то нужны варианты, я рекомендую этот учебник и эту статью.
NB: Например $1 имеет другое значение для bash (что работает с вашим терминалом), как и для awk: первый расширяет его до первого аргумента, который вы ему дали, второй интерпретирует его как ярлык для первого столбца. Вот почему нам нужны одинарные кавычки (') вокруг команды awk print, таким образом bash не разворачивает $1, но позволяет ему не смотреть на awk для разбора.