read命令不是有效的标识符错误

时间:2013-12-10 17:52:24

标签: linux bash

我已经考虑过从这个网站,手册页和谷歌阅读文件,但不理解,如果这已经得到解答,我道歉。我无法将文件读入我的脚本。我在linux中使用bash shell。我也是linux新手。

我有一个脚本应该从文本文件中读取,在指定的每条数据行上执行测试,计算等。

我收到以下错误:./ hw-script7b:第8行:读取:`hw7.list3':不是有效的标识符 hw7.list3是输入文件。它有完整的权限(读,写,甚至执行)hw-script7b是我的脚本。

文本文件包含目录的-ls列表。这可能是一个基本问题,但我迷路了。 谢谢你的帮助,

戴比

这是脚本。

echo "start"
count=0     #counting all files
xcount=0    #counting executeable files
total=0     #counting total space used
temp=0      #holding place for file being checked

exec 9< $1
while read $1 $2 $3 $4 $5 $6 $7 $8 0<&9
do
count='expr $count + 1'
if [ $4 > "$temp" ]
then
lfname="$8"
linode="$1"
lsize="$4"
lrights="$2"
lmonth="$5" 
lday="$6"
temp="$4"
else
 if [ $4 < "$temp" ]
 then
 sfname="$8"
 sinode="$1"
 ssize="$4"
 srights="$2"
 smonth="$5"
 sday="$6"
 temp="$4"
 fi
fi

#looking for executeable files
if [ -x "$8" ]
then
xcount='expr $xcount + 1'
fi
done

echo "The largest file is: "$lfile""
echo "      Inode    Size    Rights       Date     "
echo "     $linode  $lsize  $lrights  $lmonth $lday"
echo
echo
echo "The smallest file is: "$sfile""
echo "      Inode    Size    Rights       Date     "
echo "     $sinode  $ssize  $srights  $smonth $sday"
echo
echo
echo "The total number of files is "$count" and they use "$total" bytes."
echo
echo
echo "There are "$xcount" executable files."
exit 0


sample of input file: hw7.list3
934250 -rwxrwxr-x 1 1107 Dec  2 18:48 //home/others/professor/class-share/hw7.howard
7934314 -r-xr-xr-t 1 1232 Dec  2 18:48 //home/others/professor/class-share/Matts_HW6
7934139 -rwxrwxr-x 1 1232 Dec  4 20:08 //home/others/professor/class-share/Matts_HW6_2
7934366 -rwxrw-r-- 1 1537 Dec  9 19:32 //home/others/professor/class-share/bs-hw7
7934364 -rwx------ 1  965 Dec  9 19:48 //home/others/professor/class-share/hw7
7948204 -rwxr-xr-x 1 107 Nov 12 07:47 readtest1
7948209 -rwxr-xr-x 1 107 Nov 12 07:48 readtest1a
7948205 -rwxr-xr-x 1 140 Nov 12 07:48 readtest2
7948206 -rwxr-xr-x 1 160 Nov 12 07:48 readtest3
7948207 -rwxr-xr-x 1 165 Nov 12 07:48 readtest4
7948208 -rwxr-xr-x 1 211 Nov 12 07:48 readtest5
7948210 -rwxr-xr-x 1   8 Nov 12 07:49 namefile1
7948211 -rwxr-xr-x 1  17 Nov 12 07:49 namefile2
7948212 -rwxr-xr-x 1  28 Nov 12 07:49 namefile3
7932451 -rwxr--r-- 1  219 Nov 13 16:53 //home/others/professor/class-share/grades-text
7934113 -rw-r--r-- 1  111 Nov 18 17:27 //home/others/professor/class-share/test2.gz

6 个答案:

答案 0 :(得分:2)

在运行我的一个脚本时,我遇到了类似的问题。我的脚本显示正在运行的进程ID,并提示用户输入其中一个进程ID。我得到这个错误 ':不是有效的标识符:读取:`userPid

这是由于当我们将脚本从Windows切换到UNIX时,脚本中添加了一些特殊字符。 我做了以下工作,它工作正常。 须藤百胜安装dos2unix dos2unix script_file.sh 然后运行脚本。它没有问题。

答案 1 :(得分:1)

以下是一个可以帮助您入门的示例:

#!/bin/bash
echo "start"
count=0     #counting all files
xcount=0    #counting executeable files
total=0     #counting total space used
temp=0      #holding place for file being checked


while read linode lrights dummy lsize  lmonth lday dummy lfname ;
do
(( count ++ ))
(( total += lsize ))
[[ "$lrights" == *x* ]] && (( xcount ++ ))
done < $1


echo "The total number of files is "$count" and they use "$total" bytes."
echo
echo "There are "$xcount" executable files."

我将脚本命名为t.sh

$ ./t.sh hw7.list3 
start
The total number of files is 16 and they use 7346 bytes.

There are 15 executable files.

变量$1 $2 ...设置为给脚本的参数。在这里,我使用read从名称在linod, etc.中给出的文件内容中设置变量$1(注意done < $1部分)。你要做的是创建一个名为hw7.list3的变量,这是不可能的,因为它不是一个有效的Bash变量名(它包含一个点)

答案 2 :(得分:0)

': not a valid identifier:的大多数情况都是由于脚本中的某些特殊字符

确保您的编辑器支持shell脚本命令,最好避免使用Windows编辑器。尝试在linux中使用pico / vi / gedit

这可能会帮助一些有同样问题的人。

答案 3 :(得分:0)

这里的问题是你正在做read $variable而不是read variable尝试没有$符号,它应该像魅力一样。

答案 4 :(得分:0)

我遇到了同样的错误。我在记事本++上进行编辑。如果您做的是同一件事,请将eof字符隐蔽到Linux(lf)的那个字符中

答案 5 :(得分:-1)

我知道这个帖子已经过时了,但由于没有选择的解决方案,我会尝试一下。

我遇到了类似的问题,我有一个小脚本,我希望脚本读取十进制数作为第一个命令行参数。得到了相同的错误消息。

我不是bash专家,我的解决方案可能不是很优雅,但我通过在while循环之前输入for-command来解决我的问题。你可以尝试相同的

for filename in $*; do
exec 9< $1
while read $1 $2 $3 $4 $5 $6 $7 $8 0<&9
do
count='expr $count + 1'
if [ $4 > "$temp" ]
then

...

done