shell常用编程及实例-持续更新中

本文由larrylgq编写,转载请注明出处:http://blog.csdn.net/larrylgq/article/details/7395261

作者:吕桂强

邮箱:larry.lv.word@gmail.com


变量
aaa="lv";不要空格
echo $aaa->lv
echo ${aaa}txt->lvtxt
echo $aaa.txt->lv.txt

求值:
a=1
b=2

1:let:
  let c=a+b
  echo $c
  3

2:$[]:
  d=$[ a + b ]
  echo $d
  3

3:$(()):
  e=$(( a + b ))
  echo $e
  3

条件判断:

1:数值判断:
-ne -lt -lessthan -gt -le
if [ $a -gt 0 ]; then
> echo hahaha
> fi
hahaha

2:字符串判断:
a=a1
b=b1
if [[ $a == $b ]]; then
!= <= >= -z(是不是空) -n(是否非空)
> echo test
> else echo ok
> fi
ok
3:其它
if [[ -n $b ]]; then echo test; else echo ok; fi
-n是否为空
-f是否文件
-d是否目录
-x是否可执行
-e是否存在
-w是否可写
-r是否可读
-l是否link
if [ -f lv ];then echo yes; else echo no; fi
if [ -d lv ];then echo yes; else echo no; fi
a=zookeeper
if [ -f $a ];then echo yes; else echo no; fi
yes

注意:[]里面都要有空格

循环:

1:for ((i=0;i<100;i++)){ echo $i;}
   ;echo之前要有空格
2:for ((i=0;i<100;i++));do echo $i;done

3:for i in {1..100};do echo $i;done

4:echo {1..100}
   echo {a..z}
   ;结果没有换行

5:新建1.text,在1.text中输入数字
for i in `cat 1.txt`; do  echo $i; done


实战1:copy20个2.csv到root@192.168.1.208:~/分别改名为201-220,然后删除

for ((i=1;i<10;i++));do scp 2.csv root@192.168.1.208:~/20$i.csv;done
for ((i=10;i<=20;i++));do scp 2.csv root@192.168.1.208:~/2$i.csv;done
或者
for ((i=1;i<=20;i++));do if [[ $i -lt 10 ]]; then scp 2.csv root@192.168.1.208:~/n20$i.csv; else scp 2.csv root@192.168.1.208:~/n2$i.csv;fi;done

ssh root@192.168.1.208
for ((i=1;i<=20;i++));do if [[ $i -lt 10 ]]; then rm ~/20$i.csv; else rm ~/2$i.csv;fi;done
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、付费专栏及课程。

余额充值