zoukankan      html  css  js  c++  java
  • shell 编程

    1. echo 参数

    • -n 不换行(默认换行)
    • -e 使得转移字符有效

    例子

    ss='abc
    '
    echo -e  $ss
    abc
               #换行起作用
    echo $ss
    abc

    2. 赋值

    2.1 =左右两侧不要带空格

    a = "hello" #错误
    a="hello"

    2.2 左边变量名不可加$

    $a='134'
    
    [jihite]
    $a=$a'abc'
    
    [jihite]
    $echo a
    a
    
    [jihite]
    $echo $a
    134abc

    3. shell运算

    b=4
    let "c=$b+1"
    echo $c

    小例

    i=9000
    while [ $i -lt 9010 ]
    do
        let "i=$i+1"
        echo $i
    done
    9001
    9002
    9003
    9004
    9005
    9006
    9007
    9008
    9009
    9010

    4. 单引号和双引号区别

    单引号和双引号一样都是字符串的界定符,而不是字符的界定符。单引号用于保持引号内所有字符的字面值,即使引号内的和回车也不例外。

    举例

     bb="hello"
    echo "$bb"
    hello
    echo '$bb'
    $bb

    注意ecoh -e '$bb' 结果还是$bb,因为'$bb'就是字面值,不会转义。

    5. 数组

    5.1 声明、定义

    • array['a']=1
    • array=('a', 'b')
    • array=([1]='a' [2]='b')

    5.2 访问

    • echo ${array['a']}
    • echo ${array[0]}

    5.3 遍历

    for var in ${array[*]}
    do
        echo $var
    done

    5.4 数组长度

    num=${#array[@]}    

    对比:获取字符串长度:num=${#str}

    6. Linux shell实现多线程

    for ((i=0;i<5;i++)); do
    {
        sleep 3;
        echo "hello" $i
    }
    done
    wait

    对比

    for ((i=0;i<5;i++)); do
    {
        sleep 3;
        echo "hello" $i
    }&
    done
    wait

    这个在上面的基础上多加了一个后台执行&符号,此时5个循环任务并发执行,最后需要3s多一点的时间(效果非常明显)。wait的作用是完成后台所有的任务后才往下执行,否则程序本身会等待。

    7. 去除一行最后的' '

    字符串最后有个' '是非常恶心的,可以通过tr命令去掉

    a="hello
    "
    echo $a | tr -d '
    '
    hello
    
    echo $a | tr -d "
    "
    hello
    
    echo -e $a | tr -d '
    '
    hello  #转移字符起作用
    echo -e $a | tr -d "
    "
    hello

    8. 编译shell文件

    bash -x ***.sh
    

    +开头的是编译的中间过程,不带+的为正常的输出。效果非常明显。 

    9. if else

    #!/bin/bash
    proc=$1
    proc_num=`ps -ef | grep root | grep $proc | wc -l`
    echo $proc_num
    if [ $proc_num = 2 ]
    then exit 0
    else exit 2
    fi

    :if [ con ], 条件con和[]之间有空格

    • -ne —比较两个参数是否不相等
    • -lt —参数1是否小于参数2
    • -le —参数1是否小于等于参数2
    • -gt —参数1是否大于参数2
    • -ge —参数1是否大于等于参数2

       e.g.    if [ $proc_num -gt 1 ]

    以上为数字的比较,字符串的比较用'='、'!='。e.g.

    rev=$(cat /etc/ld.so.conf | grep usr/local/lib)
    if [[ $rev != '/usr/local/lib' ]]
    then
            echo "hello"
    fi

    10. for循环

    例1:

    • sleep 1    睡眠1秒
    • sleep 1s    睡眠1秒
    • sleep 1m   睡眠1分
    • sleep 1h   睡眠1小时

    例如:以下shell脚本每隔10秒钟就打印出“Hell, dansir”

    #!/bin/shell
    while   true
    do
       echo "Hello, dansir"
       sleep 10s
    done

    例2:

    ids="
    123
    456
    789"
    
    for i in $ids
    do
        echo $i
    done

    执行

    $sh del.sh
    123
    456
    789

    11. 执行变量里的命令

    $(eval  echo $v_endcomm)
  • 相关阅读:
    组合数学+结论——cf1359E
    【模拟】分类讨论大模拟+数论——cf1358F
    【思维】前缀和——cf1358E
    Android基础—— 自定义RecyclerView内部控件的监听器
    【思维】模拟+暴力——icpc nwrrc 2019 K
    分治模板
    树上问题&图论模板整理
    数据结构模板整理
    一些计数题
    Codeforces Round #567 (Div. 2)
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/3969130.html
Copyright © 2011-2022 走看看