shell

作者: 勇者与王者 | 来源:发表于2019-10-22 11:54 被阅读0次

    http://bbs.chinaunix.net/thread-218853-1-1.html
    shell 十三问

    ps -ef

    cat -n在每行前加上行号

    kill pid

    killall http*

    mount /umount 挂载设备

    df -h 查看挂载的文件系统的容量

    du -sh * du -c 显示已列出文件总大小

    sort 排序字符
    sort -n 排序数字

    pgrep 进程名 获得进程PID

    grep -v t file 反选查找不含有t 在file中
    grep -n 显示匹配到的行号
    grep -c 统计行数 grep [tf] file 正则表达式匹配

    export 设置环境变量

    vim:
    gg:到第一行
    G:到第一行
    dG:删除所有
    dd:删除光标所在行
    删除后可以用p命令取回,将刚删除的行输入到光标所在行
    复制:yw 复制一个单词,y$ 复制光标所在行到行尾,,再用p进行粘贴
    或 使用 v 进入可视模式,并移动光标选择要复制的文本,输入y复制,再用p粘贴

    脚本编写:

    !/bin/bash

    echo -n 将文本字符串与 命令输出的结果显示在同一行

    echo 中需要进行转义 如 !

    printf "%-5s %-10s %-4.2f\n" %s %c %f
    %-5s -表明左对齐 宽度为5的 字符串替换 %5s- 表明右对齐

    echo -e 接受并识别“”内的转义字符
    echo -e "1\t2\t3" ---> 1 2 3
    echo -e "\e[1;31m This is red text \e[0m" \e[1;31 颜色设置为红色,\e[0m重置

    echo ${#var} 打印变量长度

    let result=var1+var2 -->等同于 result=[var1+var2] 或 result=((var1+var2)) result=expr $var1+$var2

    计算浮点数: echo "4 * 0.56" | bc
    设置小数位个数为2: echo "scale=2;3/8" | bc
    设置进制转换: echo "obase=2;no" | bc 转换为2进制 no=1100100 echo "obase=10;ibase=2;no" | bc 将二进制ibase转换为十进制obase

    echo $? 打印前一个命令退出状态,失败返回非0

    重定向前加0 1 2代表输入输出到指定文件
    0标准输入 1标准输出 2标准错误
    2>&1 output.out

    cat a* | tee out.txt | wc -w 将cat的输出一份输出到out.txt 一份作为标准输入传给| 管道 tee相当于一个复制转发

    tee -a 追加

    cat<<EOF>log.txt
    LOG FILE HEADER
    This is a test log file
    Function:System statistics
    EOF

    将EOF之间的内容重定向至log.txt

    array_var=(1 2 3 4 5 6)
    {array_var[0]}="test1"{array_var[]} 打印所有元素 或[@]
    $[#array_var[
    ]} 打印数组长度

    关联数组:类似一种键值对
    declare -A ass_array
    fruit=([apple]='100dollars' [orange]='150 dollars')
    {fruit[apple]} 获取索引列表(键列表):{!fruit[*]}

    alias newCommand='command sequence'
    在命令前加\ 来防止不安全的命令伪装成别名

    stty -echo 禁止将输出发送至终端,stty echo 则允许发送输出

    date +%s 获取时间戳时间

    date "+%d %B %Y" ---> 20 May 2010

    echo value1 引用变量时需要 对变量赋值时不用$

    命令输出的内容赋值给变量: 或 $( )

    输出重定向 date > test 或追加 date >> test

    输入重定向: wc -l < test6

    expr 1 + 5

    $[ 1+5 ] 将数学运算赋值给变量

    (bc << EOF scale=4 a1=(var1 * var2 ) b1=(var3 * $var4)
    a1 + b1
    EOF
    )

    if 命令的退出码是否为0 即成功执行并退出

    then
    fi

    if command
    then
    command
    else
    command
    fi

    test varibles 检查变量是否有内容

    test 数值

    n1 -eq n2
    n1 -ge n2
    n1 -gt n2
    n1 -le n2
    n1 -lt n2
    n1 -ne n2

    字符串:
    test -n str1 检查字符串长度是否非0
    test -z str1 检查是否长度为0

    字符串顺序:

    < 需要转义

    比较大小按标准的ASCII顺序,大写字母小于小写字母
    sort命令实有本地化语言定义顺序,小写字母小于大写字母

    数值比较用 -gt
    字符比较用 > <

    文件比较:
    -d file 是否存在,且为目录
    -e file 文件是否存在
    -f file 文件是否存在且是一个文件
    -r 是否可读
    -s 文件存在且非空

    #0 $1
    -ne 不等于 not equal

    if [ ]
    then
    echo ..
    fi

    ls -A | wc -w 结果为0判断目录为空

    echo -n 不换行输出

    echo -n enter name:
    read name

    read -p "Please enter your name:" name

    [ -e /etc/passwd ],注意的是[]前后必须有空格,如[-e /etc/passwd]是错误的

    写法

    -d FILE_NAM # True if FILE_NAM is a directory
    -e FILE_NAM # True if FILE_NAM exists
    -f FILE_NAM # True if FILE_NAM exists and is a regular file
    -r FILE_NAM # True if FILE_NAM is readable
    -s FILE_NAM # True if FILE_NAM exists and is not empty
    -w FILE_NAM # True if FILE_NAM has write permission
    -x FILE_NAM # True if FILE_NAM is executable

    字符串测试操作

    -z STRING # True if STRING is empty
    -n STRING # True if STRING is not empty
    STRING1 = STRIN2 # True if strings are equal
    STRING1 != STRIN2 # True if strings are not equal

    算术测试操作
    var1 -eq var2 # True if var1 is equal to var2
    var1 -ne var2 # True if var1 not equal to var2
    var1 -lt var2 # True if var1 is less than var2
    var1 -le var2 # True if var1 is less than or equal to var2
    var1 -gt var2 # True if var1 is greater than var2
    var1 -ge var2 # True if var1 is greater than or equal to var2

    if [ condition-is-true ]
    then
    command 1
    command 2
    ...
    ...
    command N
    fi

    if [ condition-is-true ]
    then
    command 1
    elif [ condition-is-true ]
    then
    command 2
    else
    command 4
    fi

    case "VAR" in pattern_1) # commands whenVAR matches pattern 1
    ;;
    pattern_2)
    # commands when VAR matches pattern 2 ;; *) # This will run ifVAR doesnt match any of the given patterns
    ;;
    esac

    read -p "Enter the answer in Y/N: " ANSWER
    case "$ANSWER" in
    [yY] | [yY][eE][sS])
    echo "The Answer is Yes :)"
    ;;
    [nN] | [nN][oO])
    echo "The Answer is No :("
    ;;
    *)
    echo "Invalid Answer :/"
    ;;
    esac

    COLORS="red green blue"
    for COLOR in COLORS do echo "The Color is:{COLOR}"
    done

    for (( VAR=1;VAR<N;VAR++ ))

    while 循环
    当所给的条件为true时,循环执行while里面的代码块
    判断条件可以是任意的测试或者命令,如果测试或命令返回0,则表示条件成立,

    如果为非0则退出循环,如果一开始条件就不成立,则循环永远不会执行。

    while [ CONNDITION_IS_TRUE ]
    do

    Commands will change he entry condition

    command 1
    command 2
    ...
    ...
    command N
    done

    ./script.sh param1 param2 param3 param4

    0 -- "script.sh"1 -- "param1"
    2 -- "param2"3 -- "param3"
    $4 -- "param4"

    ping -c 1 $HOST ping 1个包

    mkdir tempDir && cd tempDir && mkdir subTempDir这个例子中,如果创建

    tempDir成功,执行后面的cd,继续创建subTempDir
    $@ -- array of all positional parameters

    function myFunc () {
    echo "Shell Scripting Is Fun!"
    }
    myFunc # call

    把函数定义在程序开始或主程序之前是一个最佳实践

    通配符:

    • :一些常用的通配符* 可以通配一个或多个任意字符
      .txt
      hello.

      great*.md

    ?匹配一个字符
    ?.md
    Hello?
    []匹配括号内部的任意一个字符

    He[loym], [AIEOU]
    

    [!]不匹配括号内的任何字符

    [!aeiou]

    预先定义的通配符 [[:alpha:]]
    [[:alnum:]] [[:space:]]
    [[:upper:]]] [[:lower:]]
    [[:digit:]]

    2>&1
    2>&1表明将文件描述2(标准错误输出)的内容重定向到文件描述符1(标准输出)

    ,为什么1前面需要&?当没有&时,1会被认为是一个普通的文件,有&表示重定向

    的目标不是一个文件,而是一个文件描述符

    cd /proc/pid/fd :查看指定的pid的文件描述符
    ls -l

    sed :只修改文件中的数据,并发送到标准输出,原文件未改变

    echo "This is a test" | sed 's/test/big test/'

    sed 's/原字符串/替换后的字符串/'

    sed -e 's/原字符串/替换后的字符串/; s/原字符串/替换后的字符串/' file.txt

    netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

    相关文章

      网友评论

          本文标题:shell

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