在写linux shell 的时候出错:integer expression expected,请各位大神帮忙

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在写linux shell 的时候出错:integer expression expected,请各位大神帮忙相关的知识,希望对你有一定的参考价值。

题目很简单,就是求从1到自己输入的数的累加和,输入的数不能超过100

有如下shell脚本,用于定时查看某目录的大小,如果目录空间超过1G则报警
[root@ ~]# vi test.sh
#!/bin/bash
#初始化环境变量
source .bash_profile
#检查归档目录的大小
arc_yiyong=`du -sh /root/test | awk 'print $1' | cut -f 1 -d "G"`
#如果目录大于1G就报警
if [ $arc_yiyong -ge 1 ]
then
echo "报警:目录已到1G"
fi
查得当前该目录大小为3.4G,应该会报警
[root@ ~]# du -sh /root/test | awk 'print $1'
3.4G
脚本执行时报integer expression expected错误
[root@ ~]# ./test.sh
./test.sh: line 7: [: 3.4: integer expression expected
根据字面意思if [ $arc_yiyong -ge 1 ]中ge 只能比较整数,但返回的3.4是小数。
同样ne、gt、lt、le、eq等也是只能比较整数,如果比较小数就会报integer expression expected。
考虑可以去掉".4",并不影响程序功能,再过滤一次".",即cut -f 1 -d ".",再无报错,且在目录大小为整数时也无报错。最终为:
arc_yiyong=`du -sh OL6.1 | awk 'print $1' | cut -f 1 -d "G" | cut -f 1 -d "."`追问

请不要从其他地方复制好吗

参考技术A 你不会把 le 写成了 1e 吧追问

没有

追答

yn1=$yn

追问

不对

从windows到linux的shell脚本编码和格式问题

windowslinuxshell脚本编码和格式问题

 

 

从windows到Linux的shell脚本编码和格式问题

1、异常问题 :set ff=unix

  • 启动脚本在启动时报错比如执行sh start.sh,时会报Command not found等等的错误,

因为我们在windows编写或修改后的脚本是dos编码,而正常的在Linux系统中执行的是unix编码,在写shell脚本的时候,在windows的上开发后,上传到服务器,可能会有文件格式不正确,通过:set ff unix可以将dos格式设置为unix下的文件格式,

解决方法:则在配置文件中非编辑模式中输入:
ff是fileencoding的简写,如下ff也可以写成fileencoding

:set ff=unix

:wq

2、查询编码 :set fileencoding

:set fileencoding

3、转换编码 :set fenc=utf-8

转换当前文本的编码为指定的编码,这里的“编码”常见为gbk utf-8 big5 cp936

:set fenc=编码            #比如下面的,注意要:w保存一下,

:set fenc=utf-8

:w

4、显示指定编码 :set enc=utf-8

以指定的编码显示文本,但不保存到文件中。

这里的“编码”常见为gbk utf-8 big5 cp936

:set enc=编码 #比如:

:set enc=utf-8

5、查看模式 :set ff

查看当前文本的模式类型,一般为dos,unix

:set ff

6、设置模式 :set ff=unix

:set ff=unix

:set ff=dos

:w

 

:%s/^M//g  这里是如果文本里面有^M结尾的话用此命令。

 

 


以上是关于在写linux shell 的时候出错:integer expression expected,请各位大神帮忙的主要内容,如果未能解决你的问题,请参考以下文章

详解shell脚本括号区别--$()$「 」$「 」 $(()) 「 」 「[ 」]

shell从入门到精通(13)输出重定向

shell从入门到精通(13)输出重定向

从windows到linux的shell脚本编码和格式问题

Linux 下Shell脚本删除过期文件

linux如何在shell中自动生成1到100的数组