zoukankan      html  css  js  c++  java
  • shell入门基础&常见命令及用法


    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,4ahello2" sed.txt

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

                sed -i "1ihello3" 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

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

      case语句

    #!/bin/bash
                  
    case "$1" in
            "start")
            echo "启动"
            ;;
         "stop")
             echo "停止"
            ;;
         "restart")
             echo "重启"
             ;;
             *)
             echo "。。。。"
             ;;
    esac

      for循环

                遍历文件夹

    #!/bin/bash
                  
    mkdir ../bak
    for file  in $(ls)
    do 
        # echo "file: $file"
        cp "$file" ../bak/"${file}-bak"
    done

       seq命令

    #!/bin/bash
                      
    for num in $(seq 5)
    do  
         echo "num: $num"
    done

       while循环

    #!/bin/bash
                   
    count=1
    while [ $count -lt 5 ]
    do  
         echo "count: $count"
         let count=count+1
    done

       until循环

    #!/bin/bash
    
    count=1
    until [ $count -ge 5 ]
    do  
         echo "count: $count"
         let count=count+1
    done

      函数

    #!/bin/bash
    
    echo "jiaoben : $1,$2,$3"
    dayin(){
    if [ $# = 3 ] 
    then
            
    echo "hanshu : $1,$2,$3"
    else
         echo "需要3个参数"
    fi
    }
    
    #dayin  e f g
    dayin  $1 $2 $3

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

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

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

  • 相关阅读:
    JavaScript控制改变鼠标的形状
    web控件开发系列(四) 自定义控件属性(上)
    web控件开发系列() 基础介绍
    Web前端面试题 Js把URL中的参数解析为一个对象
    节点的操作 创建、添加、移除、移动、复制
    一个sohoto广告弹出页提取时间的Js修改过程
    FireFox支持innerText的方法
    Js 基于html5localStorage方法 制作的 "我的便签本"
    原生JavaScript对CSS进行格式化和压缩
    JavaScript 命名规则 变量命名规则
  • 原文地址:https://www.cnblogs.com/longguoliang/p/9477414.html
Copyright © 2011-2022 走看看