我有一个目录"主目录"我想编写一个脚本,它将获得2个参数:sorted_by_date,它将在目录中找到id-worker目录(它确实存在),并在其中,从名为" sent.txt"的文件中找到,它将打印按日期排序的结果数(整数)笔划。
我是bash中的begginer(主要是在C语言中有知识和技能),我还没有看到如何编写脚本,但是我试图通过一些命令来做一些事情我从互联网上的一点点搜索中学到了东西。
在我的第一个剧本写作中,有人可以像我一样帮助新手吗?
我将在第一次尝试粘贴:
#!/bin/bash
id_worker = "$1"
results_num = "$2"
sort -k3 -t "./Main Dir/id_worker/sent.text"
head -n+3 $results_num
答案 0 :(得分:2)
我将在这里发表意见,并假设您的sort
命令正在从id_worker
sent.txt
文件中生成您想要的信息,而您正在谈论的是当您说lines
时,您想要的strokes
个数。鉴于评论中的扩展讨论,这是我认为唯一有意义的事情。
考虑到这一点,你在第一次尝试时并没有那么遥远。您需要做的是修复sort
命令,取消引用id_worker
$
以获取您传递的值。在bash中,您将变量指定为id_worker="something"
,但为了获取值,您必须在变量之前加上$
,就像您在id_worker="$1"
中看到的那样。 注意: bash中'='
标志的任意一侧都允许 NO 空格。将它们放在一起,看起来像你想要的那样:
sort -k3 -t "./Main Dir/$id_worker/sent.text"
您在Main Dir
运行脚本的上方目录中开始,因为您已经提供了相对路径"./Main Dir/stuff"
。
现在,如果您想将行数限制为已排序输出的第一行results_num
,则可以使用head
,但需要删除"+"
符号(这只与tail
命令有关。要将其与已排序的输出一起使用,您必须使用pipe
管道字符sort
head
到'|'
的结果sort -k3 -t "./Main Dir/$id_worker/sent.text" | head -n $results_num
。例如:
id_worker
放置我认为你想要的所有部分,并包括一个简短的检查以确保在命令行中给出results_num
和#!/bin/bash
## verify both arguments given
[ -z $1 -o -z $2 ] && {
printf "error: insufficient input. usage: %s worker num\n" "${0##*/}"
exit 1
}
id_worker="$1"
results_num="$2"
## pipe the results of sort to head to print first $results_num lines
sort -k3 -t "./Main Dir/$id_worker/sent.text" | head -n $results_num
,你最终会得到类似的结果:< / p>
bash -x scriptname id_worker results_num
注意:如果您的脚本出现问题,请运行:
after
启用bash的逐行调试输出。如果我不明白你在说什么,或者结果不是你想要的,请告诉我。有几种方法可以解决这个问题,但我确实需要清楚地了解你想要进一步发展什么。祝你好运。