美文网首页
Shell脚本

Shell脚本

作者: narutolufi | 来源:发表于2019-07-13 16:09 被阅读0次

    [TOC]

    变量,字符串,数组与注解

    变量

    1. 使用英文字母,数字和下划线,首个字符不能以数字开头
    2. 中间不能有空格,可以使用下划线(_)。
    3. 不能使用标点符号。
    4. 不能使用bash里的关键字(help命令查看保留关键字。
    var="dongnao"
    RUNOOB=1
    LD_LIBRARY_PATH=2
    _var=3
    var2=4
    
    #无效变量名
    ?var=123
    user*name=runoob
    
    #使用表达式或命令赋值
    files=`ls .`
    #使用变量
    echo $files
    echo ${files}
    
    #只读变量
    readonly files
    #删除变量 不能删除只读变量
    unset files
    
    #字符串
    #使用 ' 或者 " 来定义字符串,不同的
    # ' 中不能使用变量
    var="my dir has ${files}"
    
    #字符串拼接
    name="dongnao"
    full1="hello, "$name" !"
    full2="hello, ${name} !"
    echo $full1 $full2
    #获得长度
    echo ${#name}
    
    #从字符串第 2 个字符开始截取 3 个字符
    echo ${name:1:3} # 输出 ong
    
    
    #数组
    array_name=(value0 value1 value2 value3)
    echo ${array_name[0]}
    echo ${array_name[1]}
    #获得所有元素
    echo ${array_name[@]}
    
    # 取得数组元素的个数
    length=${#array_name[@]}
    length=${#array_name[*]}
    
    

    传参

    在执行shell脚本时,需要向脚本传参 $n, n 代表一个数字

    参数处理 说明
    $# 传递到脚本的参数个数
    $* 获得所有参数
    $@ 与$* 相同

    运算符

    a=10
    b=20
    #注意空格
    val=`expr $a + $b`
    #特别的 需要转义
    val=`expr $a \* $b`
    
    #关系运算符
    # -eq 是否相等
    # -ne 是否不想等
    # -gt >
    # -lt <
    # -ge >=
    # -le <=
    if [ $a -eq $b ]
    then
       echo "$a -eq $b : a 等于 b"
    else
       echo "$a -eq $b: a 不等于 b"
    fi
    if(( $a==$b ))
    then
        echo "yes"
    else
        echo "no"
    fi
    #布尔
    # ! 非
    # -o = ||
    # -a = &&
    
    #字符串
    # = 字符串相等
    # != 字符串不相等
    # -z 字符串长度为0   true
    # -n 字符串长度不为0 true
    str="123"
    if [ $str ]
    then
       echo "$str : 字符串不为空"
    else
       echo "$str : 字符串为空"
    fi
    
    #文件
    # -d 目录
    # -f 普通文件
    # -r 可读
    # -w 可写
    # -x 可执行
    # -s 文件不为空(有内容) true
    # -e 文件/目录存在
    
    

    流程控制

    #for 循环
    
    array=(1 2 3 4 5)
    for var in ${array[@]}
    do
        echo ${var}
    done
    
    for var in 1 2 3 4 5
    do
    done
    
    for f in `ls`
    do
    done
    
    #while 语句
    a=1
    while [ $a -le 5 ]
    do
        echo $a
        let "a++"
    done
    
    b=1
    while(( $b<=5 ))
    do
        echo $b
        #自增
        let "b++"
    done
    
    #无限循环
    for (( ; ; ))
    
    while true
    do
    done
    
    
    #until循环
    until(( $a>=10 ))
    do
        echo $a
        let "a++"
    done
    
    
    #case
    a=1
    case $a in
        1)  echo '1'
        ;;
        2)  echo '2'
        ;;
        *)  echo '其他'
        ;;
    esac
    
    case $a in
            1|2) echo "1/2"
            ;;
            *) echo "其他"
            ;;
    esac
    
    #break continue
    

    函数与输出重定向

    function func(){
        echo $0
        echo $1
        echo $2
    }
    func 1 2 
    
    
    #输出重定向
    #不会输出,而是将输出内容 放到一个a.txt文件,不存在则会创建
    pwd > a.txt
    #追加
    echo "1212">>a.txt
    
    #输入重定向
    cat < a.txt
    #其实可以省去 < 
    
    #输入输出重定向
    cat < a.txt > a1.txt
    
    #将eof中内容交给wc -l
    wc -l << EOF
        dongnao
        lance
        david
        jett
    EOF
    
    #/dev/null
    #希望执行某个命令,但又不希望在屏幕上显示输出结果
    #/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃
    wc -l a.txt > /dev/null
    
    
    #引入其他shell
    # 注意点号(.)和文件名中间有一空格
    . filename   
    source filename
    
    #file1
    #!/bin/bash
    str=动脑
    
    #file2
    #!/bin/bash
    #. t1.sh 或:
    source t1.sh
    echo $str
    
    #file1不需要可执行权限
    

    命令别名/撤销

    alias cdt='cd /User'
    
    unalias cdt
    

    Vi/Vim 相关命令

    进入Vi环境后,输入i,a,o 后可转化为输入模式;
    退出并保持当前文件是:Esc键后,:wq
    

    stat 查看文件信息

    Liunx 系统中的文件增删改

    touch 创建文件 --增


    touch某文件后,修改文件的ctime ,atime

    cp 复制文件--增

    cp aa.log /tmp/
    

    mv 移动或重命名文件

    //通常,将文件aa移动到其他目录下时,该动作为移动;当文件移动到当前目录时,重命名
    mv aa.log aa.txt
    

    rm 输出文件

    //循环删除文件,文件中如果有子文件一样被删除
    rm -rf xxx 
    

    linux 中的目录的增删查

    mkdir-- 增

    # /tmp/test 父目录必须存在
    mkdir /tmp/test/test1  
    
    # /tmp/test 父目录会自动创建
    mkdir -p /tmp/test/test1
    

    rmdir-- 删 只用来删除空目录

    rm -rf xxx/xxx 可以删除非空目录

    相关文章

      网友评论

          本文标题:Shell脚本

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