sfa*_*tor 2 linux bash command-line
我每天都会使用很少的长命令.所以我觉得最好有一个bash脚本,我可以传递参数,从而节省输入.我想这是Linux的常态,但我对它有点新意.有人可以告诉我如何做到这一点.一个例子是以下命令
cut -f <column_number> <filename> | sort | uniq -c |
sort -r -k1 -n | awk '{printf "%-15s %-10d\n", $2,$1}'
Run Code Online (Sandbox Code Playgroud)
所以我希望在脚本中我可以传递文件名和列号(最好以任何顺序)并获得所需的输出,而不必每次都输入整个内容.
创建一个文件说myscript.sh -
#!/bin/bash
if [ $# -ne 2 ]; then
echo Usage: myscript.sh column_number file_path
exit
fi
if ! [ -f $2 ]; then
echo File doesnt exist
exit
fi
if [ `echo $1 | grep -E ^[0-9]+$ | wc -l` -ne 1 ]; then
echo First argument must be a number
exit
fi
cut -f 10 $1 $2 | sort | uniq -c |
sort -r -k1 -n | awk '{printf "%-15s %-10d\n", $2,$1}'
Run Code Online (Sandbox Code Playgroud)
使用命令确保此文件是可执行的 chmod +x mytask.sh
你可以像sh myscript.sh 30 myfile.sh或那样调用它./myscript.sh 30 myfile.sh
上面脚本的第一行指定了您希望执行脚本的shell.$ 1和$ 2引用第一个和第二个命令行参数.
关于参数有效性检查: