linux shell入门

Posted bamboo

tags:

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

linux shell入门

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序。使用Shell可以启动、挂起、停止一些程序。

1. shell脚本格式要求

  • 脚本以 #!/bin/bash 开头
  • 脚本需要有可执行权限,或以 sh test.sh 方式执行

2.shell变量介绍

  • 系统变量:$HOME、$PATH、$PWD...,执行命令 set 可以查看所有系统变量

  • 自定义变量:

    • 定义变量:变量名=A
    • 销毁变量:unset 变量名
    • 声明静态变量:readonly 变量,注意:不能销毁


  • 定义变量的规则:

    • 变量名和等号之间不能有空格
    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
    • 不能使用标点符号
    • 不能使用bash里的关键字(可用help命令查看保留关键字)


  • 将命令的返回值赋给变量

    方式一:
    #!/bin/bash
    A=`date`
    echo $A
    
    方式二:
    A=$(date)
    echo $A
    
    //Mon May 24 18:35:05 CST 2021


  • 位置参数变量:可以在脚本中获取参数信息

    • $n ,n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……当n大于等于10时,参数变量需要用大括号包含,例${n}
    • $# ,获取传递到脚本的参数个数
    • $* ,以一个单字符串显示所有向脚本传递的参数
    • $@ ,与$*相同,但是使用时加引号,并在引号中返回每个参数。


  • 预定义变量

    • $$ ,获取脚本运行的当前进程ID号
    • $! ,后台运行的最后一个进程的ID号
    • $? ,显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

3. 基本运算符

  • 算数运算符:原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

    #!/bin/bash 
    1.使用expr
    TEMP=`expr 2 + 3`
    VAL=`expr $TEMP \\* 4`  //输出 20
    
    2.使用$((运算表达式))
    VAL=$(((2 + 3) * 4))   //输出20
  • 关系运算符:只支持数字,不支持字符串,除非字符串的值是数字。

    #!/bin/bash 
    if [ 23 -ge 22 ]
    then
          echo "大于等于"
    fi
  • 字符串运算符

    #!/bin/bash 
    if [ \'ok\' = \'ok\' ]
    then 
          echo "equal"
    fi
    
    if [ -n \'abc\' ]
    then
         echo \'字符串长度不为零\'
    fi
  • 文件测试运算符:文件测试运算符用于检测 Unix 文件的各种属性。

    #!/bin/bash 
    if [ -f /root/shell_code/hello.sh ]
    then
          echo \'/root/shell_code/hello.sh 是一个文件\'
    fi
  • 布尔运算符:

    #!/bin/bash 
    if [ !false ]
    then
          echo \'true\'
    fi
    
    if [ 1 -lt 2 -o 2 -lt 3 ]
    then
         echo \'true\'
    fi


4. 流程控制

  • if else

    #!/bin/bash
    if [ 10 -gt $A]
    then
      echo "10 大于 $A"
    elif [ 10 -gt $b ]
    then
      echo "10 大于 $B"
    elif [ 10 -gt $C ]
    then
      echo "10 大于 $C"
    else
      echo "啥也不是"
    fi
  • for 循环

    #!/bin/bash
    for var in 1 2 3 4 5
    do
      echo $var
    done
  • while

    #!/bin/bash
    int=1
    while [ $int -le 5  ]
    do
      echo $int
      let "int++"
    done
  • case ... esac

    #!/bin/bash
    value=2
    case $value in 
           1) echo 1
           ;;
           2) echo 2
           ;;
           3) echo 3
           ;;
           *) echo \'匹配失败\'
           ;;
    esac


5. 综合案例

  • 需求分析:

    • 每天凌晨2:30备份数据库test到/data/backup/mysql
    • 记录备份开始和结束时间
    • 备份后的文件以时间格式命名,并打包成.tar.gz文件。
    • 备份的同时,检查是否存在10天前的备份文件,并删除。
#!/bin/bash
#备份目录
BACKUP=/data/backup/mysql
#当前时间
DATETIME=$(date +%Y%m%d%H%M%S)
#数据库地址
HOST=localhost
#数据库名称
DATABASE=test
#数据库账号
DB_USER=root
#数据库密码DATABASE
DB_PWD=root

#创建备份目录,如果不存在,就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"

#备份数据库
mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/${DATETIME}.sql.gz

#将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除备份源目录
rm -rf ${BACKUP}/${DATETIME}

#删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \\;
echo "备份数据库${DATABASE} ok..."

//crontab定时任务设置:30 2 * * * /root/shell_code/mysql_db_backup.sh

以上是关于linux shell入门的主要内容,如果未能解决你的问题,请参考以下文章

Shell 脚本是用户使用Linux的桥梁-快速入门

linux shell入门

Linux基础入门初识Shell

Linux shell入门基础

linux shell 脚本 入门到实战详解[⭐建议收藏!!⭐]

linux shell 脚本 入门到实战详解[⭐建议收藏!!⭐]