脚本编程小结

第一次自己总结写技术性博客,总结了这么多天还是不知道怎么写,还请大家多多指教 。

 

 shell script 是利用shell的功能所写的一个“程序”, 这个程序是使用纯文本文件,将一些shell的语法与命令写在里面,搭配正则表达式、管道命令与数据流重定向等功能,已达到我们所想要的处理目的 。

shell script的作用有 :

    自动化管理 

    跟踪与管理系统 

    简单的入侵检测 

    连续命令单一化 

    简单的数据处理 (但是由于shell script的速度较慢,且使用cpu的资源较多 所                     以在处理数据的速度上 不太够用 )

 

    if、case、for、while、until、条件测试、函数、break、continue、算术运算、命令替换

if ..then 最常见的条件判断式

1、单层简单条件判断式  

  
  
  
  
  1. if [ 条件判断 ];then 
  2.       当条件判断成立时,执行的语句 
  3.  fi 

   example:如果user1 存在 就显示 exist          

  
  
  
  
  1. if id user1 &>/dev/null ;then  
  2.     echo "user1 is exist." 
  3. fi 

2、多重复杂条件判断    

  
  
  
  
  1. if [ 条件判断式1 ];then 
  2.    条件判断式1成立时 执行的语句 
  3. elif [ 条件判断式2 ];then 
  4.    条件判断式2成立时 执行的语句 
  5. else 
  6.     当条件12 都不满足时 执行的语句 
  7. fi  

 

  
  
  
  
  1. read -p "your choice:" CHOICE 
  2.  
  3. if [[ "CHOICE" = "U" -o  "CHOICE" = "u" ]];then 
  4.     id -u $USERNAME 
  5. elif [[ "CHOICE" = "G" -o  "CHOICE" = "g" ]];then  
  6.       id -g $USERNAME 
  7. elif [[ "CHOICE" = "S" -o  "CHOICE" = "s" ]];then 
  8.     grep "^$USERNAME\>" /etc/passwd | cut -d: -f7 
  9. elif [[ "CHOICE" = "Q" -o  "CHOICE" = "q" ]];then 
  10.      echo "quit" 
  11.      exit 0 
  12. else  
  13.     echo "wrong choice" 
  14. fi 

 case ..esac 判断  

  
  
  
  
  1. case $变量名称 in 
  2.     "第一个变量内容") 
  3.          程序段 ;; 
  4.      "第二个变量内容") 
  5.           程序段;; 
  6.      *) 
  7.           程序段;; 
  8. esac 

example :

  
  
  
  
  1. read -p "input a username:" USERNAME 
  2. read -p "input you choice :" CHOICE 
  3.    case $CHOICE in  
  4.  
  5.       U|u) 
  6.          id -u $USERNAME;; 
  7.       G|g) 
  8.          id -g $USERNAME;; 
  9.       S|s) 
  10.           grep "^$USERNAME\>:" /etc/passwd |cut -d: -f7;; 
  11.       Q|q) 
  12.           exit;; 
  13.        *) 
  14.           echo "please input a right choice"    
  15.    esac  

for 

    for ..do..done (固定循环,已经知道要循环几次)

   

  
  
  
  
  1. for I in con1 con2 con3.. 
  2. do  
  3.    程序段 
  4. done  
  5. 第一次循环 $I 的内容为 con1 
  6. 第一次循环 $I 的内容为 con2 
  7. 第一次循环 $I 的内容为 con3 

 example :添加三个用户

  
  
  
  
  1. for USER in user1 user2 user3; do 
  2.     useradd $USER 
  3. done 

 example :计算从1加到100

  
  
  
  
  1. declare -i SUM=0 
  2. for I in {1..100} 
  3. do  
  4.     SUM=$[$SUM+$I] 
  5. done 
  6. echo $SUM 

example :查看系统上的每一个账号

  
  
  
  
  1. users=$(cut -d: -f1 /etc/passwd) #获取账号 
  2. for  username in $users ;do 
  3.     id $username 
  4.     finger $username 
  5. done  

while until  都是不定循环  即循环的次数不固定 只要满足条件 即可

  
  
  
  
  1. while [条件判断式];do   # 条件满足就就循环 不满足 就退出循环  
  2.      程序段落   
  3. done  
  4.  
  5. until [条件判断式];do  # 条件不满足就循环 满足就退出循环 
  6.       程序段落 
  7. done    

 example:用户输入Y或者y 才结束循环 

  
  
  
  
  1. while [ "$yn" != "y" -a "$yn" != "Y" ];do 
  2.       read -p "please input y|Y to stop this program :" yn 
  3. done  
  4.      echo "ok ! you input the correct answer." 

 

 

  
  
  
  
  1. until [ "$yn" = "y" -o "$yn" = "Y" ];do  
  2.       read -p "please input y|Y to stop this program :" yn  
  3. done   
  4.      echo "ok ! you input the correct answer."  

 

 条件测试:

   shell提供了对字符串、文件、数值及逻辑操作等内容的条件测试的支持。

    一般有三种格式 :

    [ expression ]  

    [[ expression ]]   使用方括号时,要注意在条件两边加上空格

     test expression

判定字符串的数据 
   test -z string  #判断string 是否为空 为空则为 true 
   test -n string  #判断string是否不为空,为空则为false
   test str1 = str2 #判断str1是否等于str2,相等 则为 true 
   test str1 != str2 #判断str1是否等于str2,不相等 则为 true 
 
数值的比较 :
     -eq 相等 -ne不等  -gt大于  -lt小于  -ge大于等于  -le小于等于
文件状态的测试:
     -e 该文件名是否存在
     -d 该文件名是否存在且为目录
      -f 该文件名是否存在且为文件 
      -b块设备文件 -c字符设备文件 -s套接字文件 -p管道文件 -L 连接文件 
 
    文件权限的检测
         -r可读 -w可写 -x可执行 -u SUID属性 -gSGID属性 -k sticky bit属性            -s非空白文件 

    两个文件之间的比较:

         -ef 判断file1 与file2 是否为同一个文件,主要意义在于判断了两个文             件是否指      向同一个inode 号

          -nt 判断 file1 是否比file2 新

           -ot    判断file1 是否比file2 旧

多重条件判断:

   -a 两个条件同时成立

   -o  任何一个条件成立

    !   反向状态 

函数 :最大的功能就是 简化程序代码。可以多次调用 

  
  
  
  
  1. fname(){ 
  2.      程序段 

      example :

  
  
  
  
  1. #!/bin/bash 
  2. showecho() { 
  3.     echo "How are you?" 
  4.  
  5. for I in {1..10}; do 
  6.   echo $I 
  7.   showecho  函数调用
  8. done 

break结束循环  continue结束本次循环进行下一轮循环

  
  
  
  
  1. #!/bin/bash  
  2. declare -i I=0 
  3. while true ;do 
  4.   let I++ 
  5.  echo "$I" 
  6.    if [ $I -ge 10 ];then 
  7.        break  $I大于等于10 就退出循环
  8.    else  
  9.        continue  $I 小于10 就进入下一轮循环
  10.    fi 
  11. done 
  12. 结果是 1 2 3 4 5 6 7 8 9 10
     

算数运算 : 

  + - * / % 

  常用方法 : 复制给变量  使用echo 回显 

  
  
  
  
  1. #SUM=$[2+3] 
  2. #echo $SUM 
  3. #let SUM=2+4 
  4. #echo $SUM 
  5.  
  6. #SUM=$((2+5)) 
  7. #echo $SUM 
  8.  
  9. #expr 2 + 3  # 直接显示结果
  10.  
  11. SUM=`expr 2 + 3` 
  12. #echo $SUM 

 判断奇数偶数     

 

  
  
  
  
  1. read -p "please input a number :" I 
  2. [ $[$I%2] -eq 0 ] && echo "even " || echo "odd" 

命令替换:

   两种形式 `COMMAND`  $(COMMAND)

  
  
  
  
  1. sun=`id -u www` 
  2. # echo $sun 
  3. 508 
  4. sun=$(id -u www) 
  5. # echo $sun 
  6. 508 

       

  

   

你可能感兴趣的:(程序,表达式,数据流,定向,的)