zoukankan      html  css  js  c++  java
  • Shell基础

    Shell基础

    一.变量

    1.系统变量  例:$PATH  $USER

    2.自定义变量

      例:A=100                     定义局部变量

            echo "A=$A"            打印变量

            unset A                   撤回变量

    3.静态变量 不能unset

      例:readonly A=100

    4.位置参数变量

     例:./*.sh   100  200

           $n   $0:./*.sh  $1:100 $2:200  十以上但参数需要大括号包含如:$(10)

           $*   所有参数当作一个整体

           $@  参数区分对待

           $#   所有参数的个数

    5.预定义变量

       $$  当前的进程号PID

       $!  后台运行最后一个进程号

       $?  最后一次执行命令的返回状态 如果是0则正确执行 否则不正确

    规则

     1)变量名可以由字母,数字或者下划线组成,但不能以数字开头

     2)等号两侧不能由空格

     3)变量名称习惯大写

    结果返回:

     例:RESULT=`ls -l /home`     反引号

           RESULT=$(ls -l /home)

    二.设置环境变量(/etc/profile)

     1)export 变量名=变量值    将shell变量输出为环境变量

     2)source 配置文件           让配置文件立即生效

     3)echo $变量名               查看环境变量

    三.注释

    单行注释: #

    多行注释::<<!  内容   !

    四.运算符

    1)"$((运算式))" 或 "$[运算式]"

    2)expr m + n   (+,-*,/,%  加减乘除取余) expr运算符间有空格

    五.流程控制

    1.条件

     语法: 

       if [ condition ]

           then

          程序

           elif [ conditon ]

           then

          程序

       fi

    非空返回 true  可以使用$?验证(0:true  >1:false)(condition前后有空格)

     判断条件:

       1)整数比较

         =  字符串比较

          -lt   小于

        -le  小于等于

        -eq  等于

        -gt  大于

        -ge  大于等于

        -ne   不等于

      2)文件权限判断

        -r   读权限

        -w  写权限

        -x   执行权限

      3)文件类型判断

        -f  文件存在且是常规文件

        -e  文件存在

        -d  文件存在并是一个目录

     例:

     1 #!/bin/bash
     2 
     3 if [ "ok" = "ok" ]
     4 
     5 then
     6 
     7   echo "true"
     8 
     9 fi
    10 
    11 if [ -e "/home/*.txt" ]
    12 
    13 then
    14 
    15   echo "true"
    16 
    17 fi

    2.Case

      语法: 

      case $变量名 in

        "值1")

          程序1

             ;;  

        "值2")

          程序2

             ;;

        *)

          以上都不是执行

             ;;

      esac

    3.for循环

     语法:

      for 变量 in 值1 值2 ....

        do

          程序

      done

      

      for ((i=1;i<=100;i++))

        do

          程序

      done

     例:

     1 #!/bin/bash
     2 
     3 for i in "$*"
     4 do
     5     echo "$i"
     6 done
     7 
     8 for j in "$@"
     9 do
    10     echo "$j"
    11 done

     

    4.while循环 

     语法:

      while [ condition ]

      do

        程序

      done

    5.read 读取控制台输入

     语法:

      read【选项】【参数】

      选项:

        -p:读取值时提示符

        -t:读取值等待时间秒,如果没 则不等待

      参数:指定读取值读变量名

     例:

    1 #!/bin/bash
    2 
    3 read -t 10 -p "请输入一个数字:" NUM
    4 echo "你输入的数字是:$NUM"

      

    六.函数

      常用函数:

      1)获取路径的最后文件名

        basename  /home/*.txt  =>   *.txt

        basename  /home/*.txt  .txt =>   *

      2)获取路径除文件名的路径

        dirname /home/aaa/*.txt  =>   /home/aaa

     自定义函数:

      [ function ] function[()]

      {

        Action;

        [return int;]

      }   

      例:

    #!/bin/bash
    
    #定义函数
    function getSum(){
      SUM=$[$n1+$n2]      
      echo "和等于:$SUM"  
    }
    
    read -p "请输入第一个数:" n1
    read -p "请输入第二个数:" n2
    
    #调用函数
    getSum $n1 $n2

      

    七.定时任务

     例:完成数据库的定时备份

     1 #!/bin/bash
     2 
     3 #备份的路径
     4 BACKUP=/data/backup/db
     5 
     6 #当前时间作为文件名
     7 DATETIME=$(date +%Y_%m_%d_%H%M%S)
     8 
     9 echo "=======备份开始========"
    10 echo "=======$DATETIME.tar.gz========="
    11 
    12 #主机
    13 HOST=localhost
    14 #用户名
    15 DB_USER=root
    16 #密码
    17 DB_PWD=123456
    18 #备份数据库名
    19 DATABASE=test
    20 #创建备份路径
    21 [ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
    22 #执行mysql备份数据库指令
    23 mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
    24 
    25 #打包
    26 cd $BACKUP
    27 tar -zcvf  $DATETIME.tar.gz  $DATETIME
    28 
    29 #删除10天前备份文件
    30 find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} ;
    31 
    32 echo "=========备份成功========="

    创建定时器  2点执行

    crontab -e

    * 2 * * *  sh路径

      

  • 相关阅读:
    Linux/shell: remove adjacent similar patterns
    Calculate difference between consecutive data points in a column from a file
    awk
    自定义Cordova插件(基础篇)
    npm init 命令生成package.json文件
    自定义Cordova插件详解
    Android 回退键监听
    Cordova结合Vue学习Camera
    解决悬浮的<header>、<footer>遮挡内容的处理技巧
    npm 是干什么的
  • 原文地址:https://www.cnblogs.com/shawn-sun/p/13775616.html
Copyright © 2011-2022 走看看