Shell基础知识

作者: labi3285 | 来源:发表于2018-10-10 15:14 被阅读161次

    简介

    Shell是Linux内核系统下的脚本工具,由于是开源系统,Shell工具被开发出不同的版本。

    版本 说明
    sh UNIX标准shell,最初版本。
    csh 类似c语言。
    tcsh csh扩展。
    ash 轻量级shell,用于低配置环境。
    bash Linux默认,基本兼容sh。

    /etc/shells文件记录了当前系统支持的shell:

    /bin/bash
    /bin/csh
    /bin/ksh
    /bin/sh
    /bin/tcsh
    /bin/zsh
    /user/local/bin/fish
    

    查看默认shell:

    echo $SHELL
    /bin/bash
    

    选择版本:

    #!/bin/bash
    /bin/bash
    

    从脚本文件执行:

    #!/bin/bash
    chmod +x ./test.sh  #获取执行权限
    
    #直接执行
    ./test.sh
    #作为参数执行
    /bin/bash test.sh
    

    语法

    #!/bin/bash
    
    #打印输出
    echo 'hello world!' #输出到屏幕
    echo '`date`' #原样输出
    echo "`date`" #带参数
    
    #定义变量(文本类型)
    readonly varA=10 #只读变量
    varB='B with ${varA}' #纯文本
    varC="C with ${varA}" #可以带参数
    varD='D'
    unset varD #删除变量
    
    #echo $varA #这个用法不推荐
    echo ${varA}
    echo ${varB}
    echo ${varC}
    echo ${varD:-'D is delete'}
    
    #替换变量
    echo ${varD:-'D'} #如果varD为空,则返回'D'
    echo ${varD:='D'} #如果varD为空,则返回'D'并赋值varD
    echo ${varD:?'error: D is delete!'} #如果varD为空,则抛出错误
    echo ${varD:+'D'} #如果定义了varD,则返回'D',否则返回空
    
    #系统变量
    echo "当前脚本:$0"
    echo "参数个数:$#"
    echo "参数:$1 $2 $3"
    echo "所有参数:$@"
    echo "所有参数:$*" #这个参数在"$*"这种方式下,返回的是单一字串
    echo "上一个命令的结果(也就是函数返回值):$?"
    echo "Shell进程:$$"
    
    
    #$()执行命令
    echo $(date)
    #``执行命令(同上)
    echo `date`
    
    
    #字符串
    varStr = 'This is a string.'
    echo ${#varStr} #获取长度
    echo ${varStr:0:4} #截取(超限不报错)
    
    
    #数组
    varArr=(1 2 3)
    varArr[3]=4 #赋值
    echo ${varArr[*]} or ${varArr[@]}  #取所有元素
    echo ${varArr[0]} #取值
    echo ${#varArr[*]} or ${#varArr[@]} #获取长度
    
    
    #条件分支
    if [ 1 < 2 ]; then
        echo '1<2'
    elif [ 1 > 2 ]; then
        echo '1>2'
    else
        echo '1=2'
    fi
    
    case b in
    a ) echo 'a' ;;
    b ) echo 'b' ;;
    c ) echo 'c' ;;
    esac
    
    
    #循环
    for i in 1 2 3; do 
        echo $i
    done
    
    c=0
    while [ $c -lt 3 ]; do
        echo $c
        c=`expr $c + 1`
    done
    
    c=0
    until [ ! $c -lt 3 ]; do
        echo $c
        c=`expr $c + 1`
    done
    
    for x in 1 2 3; do 
        for y in a b c; do 
            if [ $x == 3 ]; then
                break 1 #跳出第一次循环
            fi
            if [ $y == 'c' ]; then
                continue #相当于 continue 2
            fi
            echo "${x}-${y}"
        done
    done
    
    
    #函数
    sum() { #定义
        total=0
        for a in $@; do 
            total=`expr $total + $a`
        done
        return $total
    }
    sum 1 2 3 #执行
    echo $? #获取返回值
    unset -f sum #删除函数
    
    
    #包含文件
    touch another.sh
    echo "anotherInfo='This is another shell.'" > another.sh
    . ./another.sh #包含文件(不需要获取权限)
    echo "$anotherInfo" #执行文件里面的命令
    
    
    #重定向
    printf '' > cache.txt #命令的输出重定向到文件(覆盖)
    echo 123 >> cache.txt #命令的输出重定向到文件末尾
    wc -l < cache.txt #获取文件的行数
    

    运算支持

    shell本身不支持运算,但是因为可以执行命令,间接有了运算的能

    #运算
    echo `expr 1 + 2` #加
    echo `expr 1 - 2` #减
    echo `expr 1 \* 2` #乘
    echo `expr 1 / 2`  #除
    echo `expr 1 % 2` #取余
    
    #比较
    if [ 1 == 2 ]; then
        echo '1=2'
    fi
    if [ 1 != 2 ]; then
        echo '1!=2'
    fi
    
    #布尔运算
    if [ true -o false ]; then 
        echo 'xxx'
    fi
    

    支持的运算符号:

    运算符 说明
    -eq equal, 相当于==
    -ne not equal,相当于!=
    -gt greate than
    -lt less than
    -ge greate or equal
    -le less or equal
    ! not
    -o or
    -a and

    相关文章

      网友评论

      本文标题:Shell基础知识

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