美文网首页
shell笔记

shell笔记

作者: MkTom | 来源:发表于2018-09-23 15:40 被阅读0次

3天 自动化运维

shell语法

项目发布

1、shell

shell是一个命令解释器,实际是一个程序,/bin/bash,linux中所有的命令都由它来解释,有自己的语法

shell脚本

    以.sh结尾

    shell语法+linux命令

注释:

    单行注释 : #
    多行注释 : :<<c   c

shell执行方式

    bash /path/to/script-name  或   /bin/bash /path/to/script-name    (强烈推荐使用)
    /path/to/script-name   或  ./script-name    (当前路径下执行脚本)
    source script-name  或  . script-name    (注意“.“点号后面有空格)

    前两种执行时,都会开启新的进程执行脚本
    source不会开启新的进程

    使用source时,可以与当前终端共享进程,共享变量(重点)


变量

    1、name=itcast
    2、name='itcast $age'  不会解析里面的遍历
    3、name=”itcast $age“ 解析变量后,再拼接成新的字符串

命令变量(重点)

    1、name=`ls`
    2、name=$(ls)

    括号里必须是linux命令,把命令执行的结果记录给变量

全局变量

    方法一:

    变量名=值

    export 变量

    方法二:(最常用)

    export 变量名=值

    如果是在终端中定义全局变量,作用范围是当前终端及子进程


    (重点)
    如果想要自己定义的全局变量在跟系统的全局变量一样在所有环境都有效,需要在~/.bashrc或/etc/profile文件中定义:

    修改~/.bashrc后,直接打开新的终端,定义的全局变量就生效了,此方式只对当前用户有效
    修改/etc/profile时,需要重启操作系统,定义的全局变量才生效,此方式对所有用户有效
    上面两种方式在修改文件后,如果想让全局变量在当前终端生效,需要执行命令source ~/.bashrc或source /etc/profile

查看变量

    标准使用方式:"${变量名}"


内置(重点)

    $0  获取当前执行的shell脚本文件名
    $$  获取执行shell脚本的进程号
    $n  获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9就要用大括号括起来${10}
    $#  获取当前shell命令行中参数的总个数
    $?  获取执行上一个指令的返回值(0为成功,非0为失败)


    $?:上一条命令是执行一个文件,返回的结果是文件中的最后一条命令

默认值

    1、(重点)

     变量a如果有内容,那么就输出a的变量值

    ​ 变量a如果没有内容,那么就输出默认的内容

    ​ 格式:

         ${变量名:-默认值}

    2、

     无论变量a是否有内容,都输出默认值

    ​ 格式:

        ${变量名+默认值}

测试语句(重点)

    等号左右必须有空格,中括号左右必须有空格

    test a = 1

    [ a = 1 ]

逻辑表达式

    &&符号
    命令1 && 命令2
    如果命令1执行成功,那么执行命令2
    如果命令1执行失败,那么不执行命令2

    ||符号
    命令1 || 命令2
    1 如果命令1执行成功,那么不执行命令2
    2 如果命令1执行失败,那么执行命令2


文件表达式

    判断是否是可执行文件

    [ -f abc ] && [ -x abc ]

计算表达式

    a=$((a+1))
    let a=a+1


重定向

    命令>文件

    命令返回的结果又正确和错误两种,1代表正确,2代表错误

    bash chongdingxiang.sh >/dev/null 2>&1 &

    把正确的和错误的结果都输出到黑洞文件,而且命令在后台执行

linux四剑客

    grep

        grep -nr 关键字 .

    find

        find . -name "*sh"

    sed

        行编辑工具

        -i 真正的修改

            s:替换
            a:追加
            i:插入
            d:删除

        sed -i "s#sed#SED#g" sed.txt

            每一行找到sed,把所有的替换为SED

        sed -i "2s#SED#sed#2" sed.txt

            第二行的第二个SED替换为sed

        sed -i "1,4a\hello2" sed.txt 

            在1到4行的每一行后追加一行内容

        sed -i "1i\hello3" sed.txt

            在第1行前插入一行

        sed -i "2d" sed.txt 

            删除第2行

    awk

        分析工具,按行处理

        awk 'BEGIN{FS=":";OFS="--"} {print $2,$NF}' awk2.txt 

        默认按照空格或tab键拆分数据,通过OFS指定输出时的分隔符

流程控制

    if语句


    if [ 条件 ]
    then
         指令1
    elif [ 条件2 ]
    then
        指令2
    else
        指令3
    fi


     1 #!/bin/bash
      2 
      3 read -p "请输入性别:" sex
      4 if [ "$sex" == "nan" ]
      5 then
      6 echo "输入的是男"
      7 fi

     case语句

          1 #!/bin/bash
          2 
          3 case "$1" in
          4     "start")
          5         echo "启动"
          6         ;;
          7     "stop")
          8         echo "停止"
          9         ;;
         10     "restart")
         11         echo "重启"
         12         ;;
         13     *)
         14         echo "。。。。"
         15         ;;
         16 esac

    for循环

        遍历文件夹

          1 #!/bin/bash
          2 
          3 mkdir ../bak
          4 for file  in $(ls)
          5 do 
          6    # echo "file: $file"
          7    cp "$file" ../bak/"${file}-bak"
          8 done

        seq命令

              1 #!/bin/bash
              2 
              3 for num in $(seq 5)
              4 do  
              5     echo "num: $num"
              6 done

    while循环

          1 #!/bin/bash
          2 
          3 count=1
          4 while [ $count -lt 5 ]
          5 do  
          6     echo "count: $count"
          7     let count=count+1
          8 done


    until循环

          1 #!/bin/bash
          2 
          3 count=1
          4 until [ $count -ge 5 ]
          5 do  
          6     echo "count: $count"
          7     let count=count+1
          8 done

函数

      1 #!/bin/bash
      2 
      3 echo "jiaoben : $1,$2,$3"
      4 dayin(){
      5 if [ $# = 3 ] 
      6 then
      7         
      8 echo "hanshu : $1,$2,$3"
      9 else
     10     echo "需要3个参数"
     11 fi
     12 }
     13 
     14 #dayin  e f g
     15 dayin  $1 $2 $3

     使用source执行脚本,脚本中定义的变量和函数都能在当前终端调用

     让root用户能够使用python虚拟环境

     export WORKON_HOME=/home/python/.virtualenvs/
     source /usr/local/bin/virtualenvwrapper.sh



linux操作

    连接

    windows连接linux

        使用xshell

    linux\mac连接linux

        使用ssh:ssh python@192.168.133.135

    sudo passwd 启用root用户

    使用root用户远程连接

    1、修改配置文件
        sudo vi /etc/ssh/sshd_config
    2、修改下面内容

        PermitRootLogin prohibit-password

        PermitRootLogin yes
    3、重启ssh服务

        service ssh restart

    传输文件

        apt install lrzsz

        windows中

        上传

            连接远程服务器,切换到某个目录,输入rz,选择文件

        下载

            连接远程服务器,切换到某个目录,输入sz 文件,选择保存的路径


        linux中

            scp 源文件 目标

            下载

                scp python@192.168.133.135:/home/python/Desktop/heha .

            上传

                scp heha python@192.168.133.135:/home/python/Desktop/

        linux免密登录认证

            1、A连接B,A申请一对钥匙

                ssh-keygen -t rsa

                拷贝公钥
                cat /root/.ssh/id_rsa.pub 
            2、B服务器修改配置文件

                vi /etc/ssh/sshd_config

                取消下面内容的注释

                AuthorizedKeysFile      %h/.ssh/authorized_keys

            3、创建文件

                vi /root/.ssh/authorized_keys

                保存A服务器的公钥

            4、B服务器重启ssh服务

                service ssh restart

相关文章

  • linux shell脚本攻略笔记

    LINUX SHELL脚本攻略笔记[速查] linux shell脚本攻略笔记

  • Shell十三问 学习笔记

    文本处理 Shell脚本编程 Shell 十三问 学习笔记 shell and Carriage 关系 Shell...

  • Shell脚本

    shell脚本学习笔记 shell命令的组合运用 常用命令组合

  • Shell入门笔记

    本笔记参考 Linux探索之旅 1.什么是Shell 2.Shell种类 3.Shell脚本文件 4.Shell变...

  • Shell 学习笔记

    Shell 学习笔记 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是...

  • 1.1 开始

    《Linux Shell 脚本攻略(第 2 版)》读书笔记 Bash (Bourne Again Shell)是目...

  • SHELL 笔记

    shell笔记 判断语句 运算 选择语句 循环语句 将shell字句执行结果复制给变量 shell简单传参 编号变...

  • 1.11 调试脚本

    《Linux Shell 脚本攻略(第 2 版)》读书笔记 启用 shell 脚本的跟踪调试功能bash -x s...

  • Linux操作系统命令汇总

    SHELL脚本学习笔记 标签(空格分隔): linux shell脚本 1. 常用命令汇总 alias 设置别名u...

  • shell script学习笔记

    shell学习笔记 什么是shell? shell是运行在linux服务器上的用c语言编写的程序,即可以是服务器端...

网友评论

      本文标题:shell笔记

      本文链接:https://www.haomeiwen.com/subject/oxqqoftx.html