shell 编程学习

作者: 卅清 | 来源:发表于2020-02-23 10:26 被阅读0次

    当前shell执行命令。./或者source

    新建shell:/bin/bash  ./file.sh   bash

    $$;当前进程pid

    pstree:查看进程关系。

    文本流

    输出重定向:干预0,1,2输出的数据,将输出到控制台的数据,输出到指定文件里

    ls 1> te:覆盖

    ls 1>> te :追加。

    将1,2各输出到一个文件:

    ls / /ccc 1>>t1 2>>t2

    将1,2输出到同一个文件:

    ls / /ccc 1>t.txt 2>&1

    ls / /ccc >& t.txt

    ls / /ccc &> t.txt

    如果ls / /ccc 2>&1  1>t.txt,错误输出重定向到1,而此时的1却仍然定向到控制台,下一个1才重定向t.txt,所以报错会输出到控制台,而正确的会输出到t.txt.

    0 标准输入

    1标准输出

    2错误输出

    输入重定向:

    read aaa <<< "hello xxx"

    echo $aa

    hello xxx

    read aaa  <<ab

    ab停止输入

    cat 0<file:

    exec:

    type -a ls

    变量:

    变量定义:

    1.变量名=变量值

    2.变量名='变量值',不解析变量值的内容,整体

    3.变量名=“变量值”  变量值中如果有变量存在,先解析变量,再

    拼接。

    命令变量:将命令作为变量

    变量名=``

    变量名=$(命令)

    注意使用命令变量时,注意初次定义才会执行。

    如,

    变量的访问:

    1.$变量名 ,空

    2."$变量名" 空字符串,保证变量不存在,得到是空字符串。

    3.${变量名} 区分是否有变量名

    4."${变量名}" 2,3合并,

    unset 变量名 取消变量名

    变量分类:

    本地变量:在当前shell,生命周期随shell

    局部变量:,只能用于local函数,当前函数中使用。

    local a

    全局变量:当前系统所有的环境使用

    env # 只显示全局变量

    export 变量名=值:子bash继承父bash,不能跨bash。比如新开终端。

    shell内置变量/位置变量

    $0:获取脚本名

    $1,$2,${11}  $1,接受参数。

    -脚本  -函数使用

    数组a=(1 2 3)

    特殊变量;

    $*:参数列表 双引号引用为一个字符串

    $@:参数列表,双引号引用位单独的字符串

    $#:参数个数

    $?执行上一个命令成功,返回0,失败非0

    $BASHPID:真实pid

    $$:当前shellpid,接收者

    管道:2.开启子bash。

    获取变量名长度:

    name=1111

    echo ${#name}

    4

    替换变量的部分值:

    ${变量名//匹配值/替换后值}

    字符串截取

    ${变量名:strat:截取长度}

    b=12456

    echo ${b:0-3:2}

    取变量后几个值时:

    echo ${变量: -数字},注意空格,否则输出变量值。

    echo ${变量#匹配符},匹配从左到右,截取匹配后的字符,取右边

    echo ${变量##匹配符},匹配从右到左,截取匹配后的字符,取右边

    echo ${变量%匹配符},匹配从右到左,截取匹配后的字符,取左边

    echo ${变量%%匹配符},匹配从左到右,截取匹配后的字符,取左边

    执行字符串拼接后的命令

    #! /bin/bash 

    a="ls /root/" 

    $a

    默认值相关

    1.${变量:-默认值}

    有变量输出变量值,没有就是默认值输出

    2.${变量:=默认值}

    变量不存在,将默认值赋值给变量,输出。

    3.${变量:+提示信息}

    变量存在的时候,输出提示信息

    echo ${a:+eee}

    eee

    表达式:

    test 条件表达式

    [ 条件表达式 ]

    状态返回值,真值0

    -eq 等于

    -gt 大于

    -lt 小于

    -le 小于等于

    -ge 大于等于

    -ne 不等于

    字符串比较

    str1 == str2

    str1 != str2

    逻辑表达式:

    &&  和

    如果命令1执行成功,那么执行命令2

    如果命令1执行失败,那么不执行命令2

    或者 || 

    如果命令1执行成功,那么不执行命令2

    如果命令1执行失败,那么执行命令2

    文件表达式:

    -f 判断输入内容是否是一个文件

    -d 判断输入内容是否是一个目录

    -x 判断输入内容是否可执行

    计算表达式:进行算数计算
    $((计算表达式)):+-*/,只能做整数运算

    let 计算表达式

    & :将命令从前台转到后台。

    grep

    -c:只输出匹配行的计数

    -n 显示匹配行及行号

    -v:匹配不包含匹配文本的所有行。

    -r:所有文件搜索。

    find 【路径】【参数】【关键字】

    参数:

    -name 文件名查找

    -perm 文件权限查找

    -user 文件属主来查找文件

    -group  文件所属的组

    !:取反命令。

    流程控制:

    分支语句:

    if

    if [ 条件 ]

    then

            指令1

    elif [ 条件2 ]

    then

            指令2

    else

            指令3

    fi

    case

    case 变量名 in 

            值1) 

                     指令1

                            ;;  

            值n) 

                     指令n 

                             ;;

            *)

                    指令

                            ;;

    esac

    循环语句:

    for 值 in 列表

    do

            执行语句

    done

    while 条件

    do

            执行语句

    done

    until 条件

    do

            执行语句

    done

    函数:

    函数名(){

    命令

    }

    函数名

    shell内参数:

    dayin(){

            echo "wo de mingzi shi $1"

    }

    dayin  111

    脚本传参

    canshu ="$1"

    dayin(){

            echo"wo de mingzi shi $1"

    }

    dayin "${canshu}"

    相关文章

      网友评论

        本文标题:shell 编程学习

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