小编Cas*_*y_1的帖子

之前有 bash 参数时,Getopts 不起作用

我在使用 getopts 和简单的 bash 参数时遇到问题。我的脚本从与指定表达式匹配的文件行中写出。

-f 选项允许您更改文件

-n 选项更改写出的行数

第一个参数 $1 决定表达式的类型

示例文件(file.txt):

aaaaaaaaaaaa
bbbbbbbbbbba
cccccccccccc
ab
ac
dddddddddddd
dgdgdgdgdgdg
abdbdbdbdbdb
Run Code Online (Sandbox Code Playgroud)

示例订单:

./script.sh a -f file.txt -n 2
Run Code Online (Sandbox Code Playgroud)

示例输出:

aaaaaaaaaaaa
ab
Run Code Online (Sandbox Code Playgroud)

我的脚本:

while getopts ":n:f:" opt
        do
        case $opt in
        (n)  
                argn=$OPTARG
                ;;
        (f)
                argf=$OPTARG
                ;;
        esac
        done

FOO=${argf:=/etc/passwd}
NR=${argn:=3}


echo " --------- ^$1 -----------"
awk -F':' '/^'"$1"'/ { print $1 }' $FOO | head -n $NR
Run Code Online (Sandbox Code Playgroud)

它仅适用于例如当我输入时

 ./script.sh a 
Run Code Online (Sandbox Code Playgroud)

或者

./script.sh b 
Run Code Online (Sandbox Code Playgroud)

(给我以这封信开头的行)。或者当我刚刚打字时

 ./script.sh -n 5 
Run Code Online (Sandbox Code Playgroud)

或者

./script -f …
Run Code Online (Sandbox Code Playgroud)

parameters bash arguments getopt

3
推荐指数
1
解决办法
3733
查看次数

没有子查询,带有一个表的两个"where"语句不起作用

我有一个表3列:name,lastnamedate.

例如:

Name Lastname Date
Ab   Ab       2008-07-01
Ab   Ab       2006-06-23
Kb   Kb       2008-07-01
Kb   Kb       2007-06-03
Run Code Online (Sandbox Code Playgroud)

我需要找到那些谁被分配到的名称2008-07,而不是2006-06.因此,对于此示例,输出将为:

Name Lastname Date
Kb   Kb       2008-07-01
Kb   Kb       2007-06-03
Run Code Online (Sandbox Code Playgroud)

我的代码:

select  Name, Lastname, YEAR(date), MONTH(date) from MyTable
where (YEAR(date) = 2008 AND MONTH(date) = 7) AND (YEAR(date) <> 2006 AND MONTH(date) <> 6)
Run Code Online (Sandbox Code Playgroud)

它不能很好地工作,因为没有任何事情发生(它"阻塞"例如所有名称与月份= 6).我尝试用UNION语句来做,但没有什么效果.

注意,我需要在不使用子查询的情况下执行此操作.

sql t-sql sql-server where sql-server-2008

2
推荐指数
1
解决办法
45
查看次数

标签 统计

arguments ×1

bash ×1

getopt ×1

parameters ×1

sql ×1

sql-server ×1

sql-server-2008 ×1

t-sql ×1

where ×1