shell脚本read
1. 用shell写脚本的时候,read命令报错,本来想read一个name变量的,运行之后这行报错。
按照我的经验,某些环境下的缺省变量需要用空格空出来
read [] name
2. shell脚本while read循环无法执行命令,不用循环却可以执行,这是为什么
whilereadline
do
#处理$line即每行文本
done<file.txt
或者:
catfile.txt|whilereadline
do
#处理$line即每行文本
done
检查下你的代码格式,是不是符合上述两种之一。
3. linux的shell脚本的read怎么换行输入
在末尾加反斜杆\,即可换行输入
4. shell脚本 判断read的字符串是不是纯数字
如果你是bash 3.0 或以上,可以这样写:
if [[ "$c" =~ "^[0-9]+$" ]]; then
echo "Number"
else
echo "Not a number!"
fi
5. linux shell read命令被跳过
read是读取你在屏幕上内容的。。。。如果你不输入,肯定是NULL
6. linux shell 跳过read命令,怎么解决
read默认从标准输入读取数据,而这里的管道符会将前面ls命令的结果作为标准输入传递给read命令。所以只要前面还有数据,read命令就不会等待用户输入。
其实,这里可以用 for ... in ... 结构来替代while循环。
forl1in`ls$d1`
do
read-p"1or0"y1
......
done
7. shell脚本中执行 read x 后,x立即分配内存吗分配多少
不是立即分配的
输入read x之后,按下回车键,shell会等待你输入。只有在你输入完成后,按下ctrl+D之后,shell才会重新回到命令提示符状态
变量x的大小跟你输入字符的多少有关
8. shell 脚本 while read a b c d ;do done语句中 a b 的值于最外层不一致
while循环一次只读一行,直至读到文件末尾。你试试下面这个:
while read line
do
echo "$line"
done <./data/1/statusl.txt
就会打印:
335
1
2
00
你要把每行取出来分别赋给一个变量的话,用sed 或 head 即可。
a=`sed -n '1p' ./data/1/statusl.txt`
b=`sed -n '2p' ./data/1/statusl.txt`
或者
a=`head -n 1 ./data/1/statusl.txt`
b=`head -n 2 ./data/1/statusl.txt`
而且上面的awk语句也有错误,把$a,$b放在单引号里面会被认为是awk的变量,不会被shell解析并替换成对应的值的。需要拿到单引号外面来(在$a前关闭单引号,$a之后再打开;$b同样处理)。并且,awk默认的字段分隔符就是空格,所以没必要再用 -F 指定。
修改如下:
awk '{if($1==‘$a’ && $2==‘$b’){print $1;}print ‘$a’,22}' ./data/1/statusl.txt
最后,实在不知道你要干什么。因为awk本身就会读文件,而且也是一行一行地读。
statusl.txt 只有1列,以空格作为分隔符,只能得到一个字段($1),$2不存在。 所以,上面我改的那句其实也是不对的。
9. shell脚本的read -p写法
关于第一个问题:-p: is not an identifier
有可能是因为你的PATH的设定。
你可以在第一个read之前加一行
type read
看看这个read是从哪里来的
同时直接在你的Unix prompt里也输入type read看看结果
应该得到的是同样的答案(read is a shell builtin)
Good Luck!
10. shell脚本中的read和done
while循环结构如下:
while 条件
do
...
done
应该前面还有个do的。这是固定结构,满足条件就会一直循环下去。
因为最后有输入重定向符号<,将整个while循环条件的输入指定为config变量定义的文件。所以,read会逐行读取这个文件中的字段(每行两个字段)分别作为server和ip。
需要注意的是,config.ini文件中的标题行也会被读入。
man read,说明中可以看到,如果读成功的话,read返回读取的字节数;读到文件的末尾则返回0。而对于while来讲,条件为0表示为false,则退出循环。