学习shell遇到的问题1

在做实验文件状态测试的过程中,初学shell遇到了几个问题

./test.sh: line 43: syntax error: unexpected end of file

其问题所在是由于shell脚本用Windows的记事本书写,Linux在执行时,其中有不可见的符号

解决方法为:

命令行输入 :

1)vim test.sh

2):set fileformat=unix(注意=前后不能有空格)

3):wq

问题解决

ls: cannot access 'grep': No such file or directory

代码如下,问题出在标注部分

# !binbash
if [ $# -ne 1 ]
then
        echo no arg put
        exit
fi
if [ -f $1 ]
then
        ls -l  grep $1//问题所在
        ls -l  grep $1  cut -d ' ' -f 8  num.txt
        num=0
        count=0
        while [ $num -ne 2 ]
        do
                sleep 5
                read a  num.txt
                ls -l  grep $1  cut -d ' ' -f 8  num.txt
                read b  num.txt
                if [ $a -eq $b ]
                then
                        count=`expr $count + 1`
                        echo file $1 not changed
               	else
                        echo file $1 size changed
                        num=`expr $num + 1`
                        count=0
                fi
                if [ $count -eq 10 ]
                then
                        echo ten times
                        break
                fi
        done
        if [ $num -eq 2 ]
        then
                echo two time
        fi
        exit
else
        echo wrong input
fi
exit

看到报错是在命令ls中,找不到参数“grep”的意义,发现grep被误当作ls的参数

解决:命令之间要用 | 分隔开!!!

如何获取文件大小

在实验中,需要反复验证文件大小来确认文件是否改变

一种获取文件的方法是

用命令

ls -l | cut -d ' ' -f 8

来列出指定文件状态并获取文件状态中的文件大小

可见此处 cut 采取了按域定位,以空格划分,但存在问题

当文件大小的长度不同时,f后的参数相应改变

如文件大小为4096和33,文件状态分别为

drwxrwxrwx 1 huihui huihui 4096 Jun 21 21:23

-rwxrwxrwx 1 huihui huihui   33 Jun 21 14:55

由于33前面有三个空格,则上述命令对两个文件分别为

ls -l | cut -d ' ' -f 5

ls -l | cut -d ' ' -f 7

另一种方法为

用命令

ls -l | cut -c 28-31

此处 cut 按字符定位,涵盖了表示文件大小的位数区间,较第一种方法更好

但存在两个问题:1.若存在特别大的文件,位数区间将再次改变 2.对于用户名称长度不同,相应的位数区间也不完全相同

最好的解决方法为

用命令

ls -l |  tr -s [:space:] | cut -d ' ' -f 5

其中 tr -s [:space:] 将文件大小前的多个空格合并为一个,于是 cut -d ' ' -f 5 能一定得到文件大小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值