shell的进阶编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell的进阶编程相关的知识,希望对你有一定的参考价值。

shell的进阶编程

关于for

  for 变量名字 in 列表;do

    循环体

  done

  例如for: for NAME [in WORDS ... ] ; do COMMANDS; don其中前面的name就是个变量名,而且不需要加$,每次循环和中间列表中的值有关,中间的列表可以使用花括号来表示指定范围,也可以使用一些命令来生成列表,但是需要加$(),要把前面的变量名和后面的循环体连接起来。例如:

  [[email protected] data]#touch f1,txt

  [[email protected] data]#touch f2.txt

  [[email protected] data]#touch f3.txt

  [[email protected] data]#for file in *.txt;do echo

  filename is $file;done

  filename is f2.txt

  filename is f3.txt

  其中的通配符来表示的话是不需要加双引号的。

  但是如果要在脚本里面引用文件可以使用命令cat filename,前提是命令需要反向单引号。例如:

  #!/bin/bash

  for USER in ` cat userlist.txt ;do

    useradd $USER

  done

  如果说数据量比较大的话可以实行并行运行,使用括起来然后最后加&,例如:

  #!/bin/bash

  NETID=172.16.128

  for HOSTID in 1..245;do

    

    if ping -c1 -w1 $NETID.$HOSTID &> /dev/null;then

      echo $NETID.$HOSTID is up | tee -a hostlist.txt

    fi

     &

  done

  wait

  for也是可以套嵌的,例如:

  #!/bin/bash

  for i in 1..10;do

    for j in 1..10;do

      echo -e ‘*\c‘

    done

    echo

  done

关于for还可以使用(( ))里面只要不是数字就认为是变量,例如:

  #!/bin/bash

  n=10

  for ((sum=0,i=1;i<=n;i++));do

    let sum+=i

  done

  echo sum=$sum

  像continue只是临时结束一次循环,并不影响大循环。例如:

  #!/bin/bash

  for ((i=0;i<10;i++));do

     if [ $i -eq 5 ];then

    continue

     fi

    echo i=$i

  done

  如果说确定终止循环可以使用break,但是并不是退出脚本,只是退出循环而已,退出脚本可以使用exit。例如:

  #!/bin/bash

  for ((i=0;i<10;i++));do

    if [ $i -eq 5 ];then

      break

    fi

    echo i=$i

  done

  这个例子就是打印到4,5以后就不再循环了,但是不会整个脚本的结束,以后的脚本还会继续运行。

  shift可以接连执行,例如创建不同用户吧:

  #!/bin/bash

  while [ "$1" ];do

     useradd $1

     echo user:$1 is created

    shift

  done

  echo finish

  这个脚本如果执行的话,后面跟几个用户名都可以创建。

以上是关于shell的进阶编程的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程进阶篇(完结)

Shell 编程进阶

shell脚本编程高级篇

《跟老男孩学Linux运维之shell编程实战》-第三章 shell变量知识进阶

SHELL脚本进阶

SHELL脚本进阶