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"
  • 相关阅读:
    浅谈折半搜索
    NOIP PJ/CSP-J 题目选做
    SDN第五次上机作业
    SDN第四次上机作业
    SDN第三次上机作业
    SDN第二次上机作业
    必看
    关于tensor
    permute与transpose
    1823. 找出游戏的获胜者
  • 原文地址:https://www.cnblogs.com/zhuawang/p/4964013.html
Copyright © 2011-2022 走看看