红联Linux门户
Linux帮助

怎么用-x 判断带空格的文件的可执行情况?

发布时间:2011-08-31 16:59:20来源:红联作者:gogo11
[i=s] 本帖最后由 gogo11 于 2011-8-31 17:05 编辑 [/i]

[font=微软雅黑]代码如下:[/font][code]#!/bin/bash
i=0
for file in *
do
filelist_test[$i]="$file"
#echo -e "$i\t${filelist_test[$i]}"
let i=i+1
done
echo $i
echo "-------------------------------------"
for ((j=0;j<$i;j++));do
filelist_test[$j]=`echo "${filelist_test[$j]}" | sed 's/\ /\\\ /g'`
echo -e "$j\t${filelist_test[$j]}"
done
echo "-------------------------------------"
b=0
for ((j=0;j<$i;j++));do
#echo ${filelist_test[$j]}
echo $j
if [ -f ${filelist_test[$j]} ] ; then
if [ -x ${filelist_test[$j]} ] ; then
filelist[$j]=${filelist_test[$j]} && ((b++))
echo -e "$j\t${filelist_test[$j]}"
fi
fi
#echo "-------------------------------------"
done
~
[/code][font=微软雅黑]执行情况如下:[/font]
gogo11@localhost:~/CCNP/Dynamips$ ./ls_test
22
-------------------------------------
0 CCNA\ 标准版控制台02.cmd
1 CCNA标准版控制台.cmd
2 CCNA交换版控制台.cmd
3 CCNA路由版控制台.cmd
4 CCNP\ ADSL\ 控制台\ .cmd
5 CCNP标准版控制台.cmd
6 CCNP迷你版控制台.cmd
7 CCSP\ PIX\ 控制台.cmd
8 dynamips_log.txt
9 ilt_2007101400_mips64e
10 ilt_2007101400_mips64j
11 ilt_2007101400_ppc32e
12 ilt_2007101400_ppc32j
13 ios
14 ls_test
15 ls_test02
16 net
17 start
18 TEST.cmd
19 tmp
20 top
21 VPN\ 控制台.cmd
-------------------------------------
0
./ls_test: 第 20 行: [: CCNA\:此处需要二进制操作符
1
1 CCNA标准版控制台.cmd
2
2 CCNA交换版控制台.cmd
3
3 CCNA路由版控制台.cmd
4
./ls_test: 第 20 行: [: 过多的参数
5
5 CCNP标准版控制台.cmd
6
6 CCNP迷你版控制台.cmd
7
./ls_test: 第 20 行: [: 过多的参数
8
9
10
11
12
13
14
14 ls_test
15
15 ls_test02
16
17
17 start
18
18 TEST.cmd
19
20
21
./ls_test: 第 20 行: [: VPN\:此处需要二进制操作符
gogo11@localhost:~/CCNP/Dynamips$
文章评论

共有 8 条评论

  1. gogo11 于 2011-09-05 12:39:59发表:

    引用:
    22行应该的取值吧!加${}
    wonderall 发表于 2011-9-4 20:57

    恩,加${}是我后边加的,有的地方忘了改,不过能执行正确,有的不改执行结果不对!

  2. wonderall 于 2011-09-04 20:57:23发表:

    22行应该的取值吧!加${}

  3. gogo11 于 2011-09-04 20:32:15发表:

    [i=s] 本帖最后由 gogo11 于 2011-9-4 20:34 编辑 [/i]

    引用:
    不是个文件吧,怎么能用-f呢,改成!-z试试
    wonderall 发表于 2011-9-4 20:13

    是文件,数字和“-----------------”上边的的相对应~~~~~~~
    先是用-f把不是文件的去除,然后在用-x判断是否可执行,如果不先判断是否文件,文件夹用-x也能得出是可执行文件的结论~~~~

  4. wonderall 于 2011-09-04 20:13:24发表:

    不是个文件吧,怎么能用-f呢,改成!-z试试

  5. ICEEN 于 2011-09-04 16:29:47发表:

    [i=s] 本帖最后由 ICEEN 于 2011-9-4 16:33 编辑 [/i]

    [code]for file in *
    do
    if [ -f "$file" ] &&[ -x "$file" ]
    then
    echo "EXE:$file"
    fi
    done[/code]

  6. gogo11 于 2011-09-04 10:27:41发表:

    双引号加上一样不行

  7. age 于 2011-08-31 19:52:05发表:

    变量加双引号呢?

  8. gogo11 于 2011-08-31 17:02:24发表:

    好像一个空格就会显示此处需要二进制操作符;
    多个空格就会显示[: 过多的参数