shell 简单例子(五)

shell 简单例子

编写一个名为iffile程序,它执行时判断/bin目录下date文件是否存在?
#!/bin/sh
fileName=/bin/date
if [ -f "$fileName" ]
   then
       echo "exists"
       exit 0
fi

注重解释:

-f 存在且是普通文件
-d 存在且是目录
-s 存在且字节数大于0
-r 存在且可读
-w 存在且可写
-x 存在且可执行
检测文件目录的

编写一个名为greet的问候程序,它执行时能根据系统当前的时间向用户输出问候信息。设从半夜到中午为早晨,中午到下午六点为下午,下午六点到半夜为晚上。
#!/bin/sh

nowHour=$(date +%Y%m%d%H | cut -c 9-10) #截取9 8 两位 就是截取小时
firstChar=${nowHour:0:1} #这个也是字符串截取 截取第一位 判断是否以0开头

if [ "$firstChar" -eq "0" ]
   then
      nowHour=${nowHour:1:2}#如果以0开头 就拿取第二位就可以了
      echo "time first char is zero now time is $nowHour"
fi
if [ "$nowHour" -ge 0 -a "$nowHour" -le 11 ]
   then
       echo "good morning"
elif [ "$nowHour" -gt 11 -a "$nowHour" -le 12 ]
    then
       echo "good afternoon"
else
    echo "Good evening"
fi

注重解释:

-a 逻辑与
-o 逻辑或
逻辑非


其它解释:

-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于
shell 常用判断


编写一个名为ifuser的程序,它执行时带用户名作为命令行参数,判断该用户是否已经在系统中登录,并给出相关信息。

#!/bin/sh


if test $# -ne 1
   then
        echo "Incorrect number of arguments"
         echo "Usage: ifuser username"
else
     user=$1
    if who | grep  $user
        then
            echo $1 "user is logged on."
            exit 0
      else
             echo $1 "user is not logged on."
             exit 1
fi
 fi

说明:
  (1)由于who | grep $user不是表达式而是命令组合,所以不需要test语句测试;如果命令组合执行成功,即找到指定的用户名则返回码为0;否则为非0。
  (2)在这个程序中使用了grep字符串搜索命令和“|”管道命令
  (3)用grep 命令–q选项来禁止显示搜索到的信息。
  (4)还使用了exit命令,以终止shell程序的执行。exit 0表示程序终止后返回0值,而exit1表示程序终止后返回非0的值。

将所有.txt的文件改为后缀为.doc的文件
快速创建几个txt方式:
[root@hadoop06 shtest]# vi createTxt.txt
1.txt
2.txt
3.txt
4.txt
---执行创建
[root@hadoop06 shtest]# vi runCreateTxt.sh

#!/bin/sh
for i in $(cat createTxt.txt)
  do
$(touch $i)
done

这是在看你的那个主目录 就会生成一些对应文件了

更改后缀为.doc
[root@hadoop06 shtest]# vi  runCreateTxt.sh 
#!/bin/sh
for i in $(cat createTxt.txt)
  do
    mv $i  ${i/txt/doc}
done
~        
   运行之后查看结果
-rw-r--r--. 1 root root   0 Oct 28 21:06 1.doc
-rw-r--r--. 1 root root   0 Oct 28 21:06 2.doc
-rw-r--r--. 1 root root   0 Oct 28 21:06 3.doc
-rw-r--r--. 1 root root   0 Oct 28 21:06 4.doc


  
将当前目录将当前目录下所有的.txt文件更名下所有的 .txt 文件更名
将当前目录下所有的 .txt 文件更名将当前目录下所有的.txt文件更名 当前目录下所有的 .txt 文件更名



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shell脚本高级编程教程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值