关于shell if控制语句和echo>>到xxx.sh的笔记

A.打印时间戳:

date的话你用$()引起来,或者键盘左上角那个符号引起来才能执行

echo "time is $(date +%T)!"像这样

echo ./run_nets.sh $(pwd)/$onchip_temp >> nansong_run_nets.sh

B.shell if语句:

 菜鸟我最近在学习shell脚本,自己写了个很简短的脚本测试下,一直报错“syntax error near unexpected token `then' ”。上网google了一圈也没发现原因。原来我在写if条件判断的时候,if后面缺少一个空格

[plain] view plain copy
  1. if [ 判断条件 ]  
       在写if条件判断的时候,要注意不但if后面需要空格,而且“ [ ” 后面 和“ ] ”前面都需要有空格。有没有感觉很无语。还有一点需要谨记,在shell脚本中当使用“ = ”给变量赋值的时候,在 “ = ”两边一定不能加空格,否者会把变量名当作一个命令来执行而报出“ command not found ”的错误,但是在if条件判断的时候,if [ "判断条件" ] 判断条件中需要用到比较的时候则“ = ” 或者 " != "的两边都需要用空格隔开。另外在写if判断的时候,不要忘记then,否者也会有问题。当然elif(相当于else if)是可选的。

      下面再总结一下shell脚本中,if判断中的测试选项。


1,关于文件的判断

       返回 true 如果...

       -e 文件存在
       -f file 是一个 regular 文件(不是目录或者设备文件)
       -s 文件长度不为 0
       -d 文件是个目录
       -b 文件是个块设备(软盘,cdrom 等等)
       -c 文件是个字符设备(键盘,modem,声卡等等)
       -p 文件是个管道
       -h 文件是个符号链接
       -L 文件是个符号链接
       -S 文件是个 socket
       -t 关联到一个终端设备的文件描述符
           这个选项一般都用来检测是否在一个给定脚本中的 stdin[-t0]或[-t1]是一个终端
       -r 文件具有读权限(对于用户运行这个 test)
       -w 文件具有写权限(对于用户运行这个 test)
       -x 文件具有执行权限(对于用户运行这个 test)


         -g  set-group-id(sgid)标志到文件或目录上,如果一个目录具有 sgid 标志,那么一个被创建在这个目录里的文件,这个目录属于创建这个目录的用户组,并不一定与创建这个文件的用户的组相同.对于 workgroup 的目录共享来说,这非常有用.见<<UNIX 环境高级编程中文版>>第 58 页.

         -u  set-user-id(suid)标志到文件上如果运行一个具有 root 权限的文件,那么运行进程将取得 root 权限,即使你是一个普通用户.[1]这对于需要存取系统硬件的执行操作(比如 pppd 和 cdrecord)非常有用.如果没有 suid 标志的话,那么普通用户(没有 root 权限)将无法运行这种程序.见<<UNIX 环境高级编程中文版>>第 58 页.
-rwsr-xr-t
1 root
178236 Oct 2 2000 /usr/sbin/pppd
对于设置了 suid 的文件,在它的权限标志中有"s".

        -k  设置粘贴位,见<<UNIX 环境高级编程中文版>>第 65 页.对于"sticky bit",save-text-mode 标志是一个文件权限的特殊类型.如果设置了这个标志,那么这个文件将被保存在交换区,为了达到快速存取的目的.如果设置在目录
中,它将限制写权限.对于设置了 sticky bit 位的文件或目录,权限标志中有"t".
drwxrwxrwt
7 root
1024 May 19 21:26 tmp/
如果一个用户并不时具有 stick bit 位的目录的拥有者,但是具有写权限,那么用户只能在这个目录下删除自己所拥有的文件.这将防止用户在一个公开的目录中不慎覆盖或者删除别人的文件,比如/tmp(当然 root 或者是目录的所有者可以随便删除或重命名其中的文件).

-O 你是文件的所有者.
-G 文件的 group-id 和你的相同.
-N 从文件最后被阅读到现在,是否被修改.

       f1 -nt f2     文件 f1 比 f2 新

       f1 -ot f2     f1 比 f2 老

       f1 -ef f2     f1 和 f2 都硬连接到同一个文件.

       !                非--反转上边测试的结果(如果条件缺席,将返回 true)


2,关于字符串的判断

       str1 = str2       当两个串有相同内容、长度时为真
       str1 != str2      当串str1和str2不等时为真
       -n str1        当串的长度大于0时为真(串非空)
       -z str1        当串的长度为0时为真(空串)

       str1          当串str1为非空时为真


3,数字的判断
      int1 -eq int2    两数相等为真

      int1 -ne int2    两数不等为真
      int1 -gt int2     int1大于int2为真
      int1 -ge int2    int1大于等于int2为真
      int1 -lt int2      int1小于int2为真
      int1 -le int2     int1小于等于int2为真

举例: if [ $file == onchip* ];then
                onchip_temp=$file
a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

发布了3 篇原创文章 · 获赞 31 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章