zoukankan      html  css  js  c++  java
  • shell script练习

    执行脚本的几种方式:

    1. sh a.sh 或者  bash a.sh  调用的是 /bin/bash 进程执行的,所以脚本不需要执行权限。

    2. 直接使用绝对路径执行, /home/script/a.sh  ,脚本需要有执行权限,如果没有权限可执行 chmod a+x a.sh 加入执行权限。

        (lampp启动数据库用的就是: /opt/lampp/lampp startmysql )

    sh03.sh 根据时间创建目录

    #!/bin/bash
    echo -e "I will use 'touch' command to create 3 files."
    read -p "Please input your filename:" fileuser
    
    filename=${fileuser:-"filename"}
    
    echo $filename
    
    date1=$(date -d '-2 day' +%Y%m%d) #前两天的日期
    date2=$(date -d '-1 day' +%Y%m%d) #前一天的日期
    date3=$(date "+%Y%m%d")           #下面三行在配置文件名
    file1=${filename}${date1}
    file2=${filename}${date2}
    file3=${filename}${date3}
    
    touch "$file1"
    touch "$file2"
    touch "$file3"

    sh04.sh 数字运算

    #!/bin/bash
    echo -e "You SHOULD input 2 numbers,I will cross them!
    "
    read -p "first number: " firstnu
    read -p "second number: " secnu
    total=$(($firstnu*$secnu))
    echo -e "
     The result of $firstnu x $secnu is ==> $total"

    sh05.sh 使用 test 判断文件存在和权限

    echo -e "Please input a filename,I will check the filename's type and permission. 
    
    "
    read -p "Input a filename : " filename
    test -z $filename && echo "You MUST input a filename." && exit 0
    
    test ! -e $filename && echo "The filename '$filename' DO NOT exist" && exit 0
    
    test -f $filename && filetype="regulare file"
    test -d $filename && filetype="directory"
    
    test -r $filename && perm="readable"
    test -w $filename && perm="$perm writable"
    test -x $filename && perm="$perm executable"
    
    echo "The filename:$filename is a $filetype"
    echo "And the permissions are : $perm"

    sh06.sh 使用 [] 中括号做判断

    read -p "Please input (Y/N):" yn
    [ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK,continue" && exit 0
    [ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh,interrupt!" && exit 0
    echo "I don't know what your choice is" && exit 0

    sh07.sh 脚本传参

    echo "The script name is ==> $0"
    echo "Total parameter number is ==> $#"
    [ "$#" -lt 2 ] && echo "The number of parameter is less than 2. Stop here."  && exit 0
    echo "Your whole parameter is ==> '$@'"
    echo "The 1st parameter ==> $1"
    echo "The 2nd parameter ==> $2"

    sh08.sh shift去除参数

    echo "Total parameter number is ==> $#"
    echo "Your whole parameter is ==> '$@'"
    
    shift  # 进行第一次 "一个变量的 shift "
    
    echo "Total parameter number is ==> $#"
    echo "Your whole parameter is ==> '$@'"
    
    shift 3 # 进行第二次 "三个变量的 shift "
    echo "Total parameter number is ==> $#"
    echo "Your whole parameter is ==> '$@'"

    sh06-2.sh if...then 单层判断

    read -p "Please input (Y/N):" yn
    
    if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
      echo "OK,continue"
      exit 0
    fi
    
    if [ "$yn" == "N" ] || [ "$yn" == "n" ]; then
      echo "Oh,interrupt!"
      exit 0
    fi
    
    echo "I don't know what your choice is" && exit 0

    sh06-3.sh  if...elif...else...fi 

    read -p "Please input (Y/N):" yn
    
    if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
      echo "OK,continue"
      exit 0
    elif [ "$yn" == "N" ] || [ "$yn" == "n" ]; then
      echo "Oh,interrupt!"
      exit 0
    else
      echo "I don't know what your choice is" && exit 0
    fi

    sh09.sh

    if [ "$1" == "hello" ]; then
      echo "Hello,how ary you?"
    elif [ "$1" == "" ]; then
      echo "You MUST input parameters,ex> {$0 someword}"
    else
      echo "The only parameter is 'hello',ex> {$0 hello}"
    fi

    sh10.sh

    echo "Now,I will detect your Linux server's services!"
    echo -e "The www, ftp, ssh, and mail will be detect! 
    "
    
    testing=$(netstat -tuln | grep ":80 ")
    if [ "$testing" != "" ]; then
      echo "WWW is running in your system."
    fi
    testing=$(netstat -tuln | grep ":22 ")
    if [ "$testing" != "" ]; then
      echo "SSH is running in your system."
    fi
    testing=$(netstat -tuln | grep ":21 ")
    if [ "$testing" != "" ]; then
      echo "FTP is running in your system."
    fi
    testing=$(netstat -tuln | grep ":25 ")
    if [ "$testing" != "" ]; then
      echo "Mail is running in your system."
    fi

    sh11.sh case...esac 判断

    case $1 in
      "hello") 
     echo "Hello,how are you?"
      ;;
    "")
      echo "You MUST input parameters,ex> {$0 someword}"
      ;;
    *)
      echo "The only parameter is 'hello',ex> {$0 hello}"
      ;;
    esac

    sh12.sh  

    echo "This program will print your selection !"
    read -p "Input your choice: " choice
    case $choice in
    #case $1 in
     "one")
        echo "Your choice is ONE"
      ;;
     "two")
      echo "Your choice is TWO"
      ;;
     "three")
      echo "Your choice is THREE"
      ;;
    *)
      echo "Usage $0 {one|two|three}"
      ;;
    esac

    sh12-2.sh 使用function

    function printit(){
    echo -n "Your choice is " #加上 -n 可以不断行继续在同一行显示
    }

    echo "This program will print your selection !"
    case $1 in
    "one")
    printit; echo $1 | tr 'a-z' 'A-Z' #将参数做大小写转换!
    ;;
    "two")
    printit; echo $1 | tr 'a-z' 'A-Z'
    ;;
    "three")
    printit; echo $1 | tr 'a-z' 'A-Z'
    ;;
    *)
    echo "Usage $0 {one|two|three}"
    ;;
    esac

    sh12-3.sh function带参数

    function printit(){
      echo -n "Your choice is $1" #加上 -n 可以不断行继续在同一行显示
    }
    
    echo "This program will print your selection !"
    case $1 in
      "one")
            printit 1;
            ;;
      "two")
            printit 2;
            ;;
      "three")
            printit 3; 
            ;;
       *)
            echo "Usage $0 {one|two|three}"
            ;;
    esac

    sh13.sh while do done循环

      read -p "Please input yes/YES to stop this program:" yn
    while [ "$yn" != "yes" -a "$yn" != "YES" ]
    do
      read -p "Please input yes/YES to stop this program:" yn
    done
    
    echo "OK! you input the correct answer."

     sh13-2.sh  until  do  done循环

    until [ "$yn" == "yes" -o "$yn" == "YES" ]
    do
      read -p "Please input yes/YES to stop this program:" yn
    done
    echo "OK! you input the correct answer."

    sh14.sh

    s=0
    i=0
    while [ "$i" != "100" ]
    do
      i=$(($i+1))  #每次 i 都会增加1
      s=$(($s+$i)) #每次都会累加一次!
    done
    echo "The result of '1+2+3+...+100' is ==> $s"

    sh15.sh  for...do...done循环

    for animal in dog cat elephant
    do
      echo "There are ${animal}s..."
    done

    sh16.sh 

    users=$(cut -d ':' -f1 /etc/passwd) #获取账号名称
    for username in $users #开始循环进行
    do
      id $username
      finger $username
    done

    sh17.sh  (该shell script需要检查,还有问题)

    network="192.168.66" #先定义一个域的前面部分
    for sitenu in $(seq 1 255)  #seq为sequence(连续)的缩写之意
    do
      #下面的语句取得ping 的回传值是正确的还是失败的
      ping -c 1 -w ${network}.${sitenu} &> /dev/null && result=0 || result=1
      #开始显示结果是正确的启动(UP) 还是错误的没有连通(DOWN)
      if [ "$result" == 0 ]; then
         echo "Server ${network}.${sitenu} is UP."
      else
         echo "Server ${network}.${sitenu} is DOWN."
      fi
    done

    检查网段IP使用情况

    #!/bin/bash
    #main---
    network=192.168.1
    ping_count=3
    IP=1
    :>IP_use
    :>IP_idle
    :>ping_action
    echo "`date "+%Y%m%d %H:%M:%S"`----->脚本开始执行......"
    while [ $IP -lt 255 ]
    do
    host=$network.$IP
    echo "-------->开始检测$host服务器通迅是否正常,ping次数$ping_count."
    ping $host -c $ping_count  >.ping_tmp
    sleep 1
    cat .ping_tmp  >>ping_action
    echo "-------->服务器$host检测已完成."
    sum_ping=`tail -2 .ping_tmp |head -1 |awk -F, '{print$2}' |cut -c 2-2`
    loss_ping=`tail -2 .ping_tmp |head -1 |awk -F, '{print$4}'|cut -c 2-5`
    if [ $sum_ping -eq $ping_count ];then
        echo "-->$host  IP 已经在使用中"
        echo "-->$host  IP 已经在使用中"  >>IP_use
      else
        echo "$host IP 目前空闲:$loss_ping"
        echo "$host IP 目前空闲"  >>IP_idle
    fi
    IP=$((IP+1))
    done
    echo "`date "+%Y%m%d %H:%M:%S"`----->脚本运行完毕......"
    View Code

    sh18.sh  遍历目录下文件的权限

    #1.先看看这个目录是否存在啊?
    read -p "Please input a directory:" dir
    if [ "$dir" == "" -o ! -d "$dir" ]; then
       echo "The $dir is NOT exist in your system."
       exit 1
    fi
    
    #2.开始测试文件。
    filelist=$(ls $dir) #列出所有在该目录下的文件名
    for filename in $filelist
    do
      perm=""
      test -r "$dir/$filename" && perm="$perm readable"
      test -w "$dir/$filename" && perm="$perm writable"
      test -x "$dir/$filename" && perm="$perm executable"
      echo "The file $dir/$filename's permission is $perm"
    done

    sh19.sh for...do...done 循环

    read -p "Please input a number,I will count for 1+2+...+your_input:" nu
    s=0
    for((i=1;i<=$nu;i=i+1))
    do
      s=$(($s+$i))
    done
    echo "The result of '1+2+3+...+$nu' is ==> $s"
  • 相关阅读:
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    449. Serialize and Deserialize BST
    114. Flatten Binary Tree to Linked List
    199. Binary Tree Right Side View
    173. Binary Search Tree Iterator
    98. Validate Binary Search Tree
    965. Univalued Binary Tree
    589. N-ary Tree Preorder Traversal
    eclipse设置总结
  • 原文地址:https://www.cnblogs.com/zhuawang/p/4964013.html
Copyright © 2011-2022 走看看