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,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

#!/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

posted @ 2018-08-14 19:55 鱼大大 阅读(...) 评论(...) 编辑 收藏