美文网首页
shell教程

shell教程

作者: 超哥__ | 来源:发表于2019-06-23 20:34 被阅读0次

    Linux Shell参考

    测试:docker run -it centos:6

    Linux常用命令

    自动补全

    • 在命令行输入命令首字母后,按两次tab可列出所有以该字母开头的命令
    [root@870cee8a91f9 /]# l
    l. ld lesskey lgroupmod ln logname lsmod lusermod luserdel
    
    • 在命令行输入$后,按两次tab可列出环境变量
    [root@870cee8a91f9 /]# $
    $BASH $BASH_VERSINFO $HISTFILESIZE $MAILCHECK $PWD
    
    • 在准备输入路径时,按一次tab可补全指定目录的文件
    [root@870cee8a91f9 /]# ls /bin/bas
    basename  bash
    

    命令执行方式

    • 作为可执行程序或脚本
    /bin/ls
    ./1.sh
    
    • 脚本作为解释器参数
    bash 1.sh
    bash /tmp/1.sh
    python 1.py
    
    • 使用shell命令执行
    echo $(ls -al /)
    

    echo

    • 用于在屏幕上打印字符串
    • 用于其他命令传参 echo pass | passwd user --stdin
    • 用于写入文件 echo abcd > aaa.txt
    • 用于打印变量 echo $RANDOM

    文件操作

    ls
    find 
    cat
    chmod 修改文件属性
    file 查看文件类型
    grep 正则搜索
    cut  字符串处理
    awk  字符串处理
    sed  文本字符串处理
    sort
    uniq
    du -sh 计算文件夹大小
    mkdir
    rm
    mv
    head
    tail
    which 定位可执行文件
    touch 创建文件
    

    系统

    date
    kill
    ps aux
    uname 查看系统版本
    

    网络

    curl
    wget
    scp
    ssh
    

    chmod

    权限标志

    4 r read
    2 w write
    1 x execute
    

    常用权限:

    abc a,b,c分别为三个8进制数字,每个数字对应上面权限标志的读,写,执行组合,a,b,c分别代表文件所属用户,所属用户组,其他用户执行权限
    444 r–r–r–
    600 rw——-
    644 rw-r–r–
    666 rw-rw-rw-
    700 rwx——
    744 rwxr–r–
    755 rwxr-xr-x
    777 rwxrwxrwx
    

    例:

    chmod 777 /path/to/my/file  赋予读写执行权限
    chmod chmod ug=rwx,o=x file 赋予属主和用户组读写执行权限,其他用户只有执行权限
    chmod +rwx /path/to/my/file  在原始权限上增加user/group/other的读写执行权限
    chmod +x 1.sh 有了执行权限才可以直接运行'./1.sh'
    

    awk

    截取文本列

    ps aux | grep -v grep | awk '{print $1}'
    

    sed

    正则替换

    echo This is a dog | sed 's/This/aaa/'
    

    截取文本行

    echo -e "1\n2" | sed -n '2p'
    

    find

    find .     递归列出当前目录及所有子目录,和ls区别是ls只列当前目录
    find /path -name "1.txt"  在指定目录及所有子目录查找文件
    find /tmp -exec ls {} \; 对所有找到的文件执行ls操作
    

    grep

    -E 使用郑泽
    -i 忽略大小写
    -v 反选
    -n 显示行号
    
    echo aabb | grep -E [a-z]{4}
    echo aabb1122 | grep 
    grep -nwr 字符串 目录
    ps aux | grep 进程 | grep -v grep
    

    vim

    ^ 行首
    $ 行尾
    gg 首行
    G 尾行
    x 删除当前字符
    nx 删除当前n字符
    dd 删除当前行
    ndd 删除当前n行
    / 查找
    
    a 编辑模式
    
    :命令模式
    :wq 写入文件并退出
    :q! 放弃保存并推出
    

    shell语法

    解释器说明

    一般shell脚本第一行为#!/bin/bash,这个标记告诉系统,该文件的默认解释器是bash,则效果等同于:./test.sh -> bash ./test.sh,同理如果使用了标记#!/usr/bin/pyhon,则效果等同于:./1.py -> python 1.py

    注释

    单行注释:'#'符号以后的内容都会被注释
    多行注释:
    :<<EOF
    注释内容...
    注释内容...
    注释内容...
    EOF
    

    重定向

    > 输出重定向  echo hello > test
    echo hello > /dev/null   禁止输出
    < 输入重定向  cat < test
    >> 输出追加重定向
    
    

    变量

    var1=hello # 注意=前后不能有空格
    echo $var1
    echo ${var1}_world # 注意此时需要帮助解释器识别变量,用花括号
    var1=1
    if [ $var1 -gt 0 ]; then echo ok;fi
    

    字符串

    s=abcd
    echo ${#s} 长度
    echo ${s:1:2} 子串
    

    数组

    array_name=(value0 value1 value2 value3)
    array_name[4]=value4 # 赋值
    echo ${#array_name[@]} # 获取长度
    echo ${array_name[4]} # 获取元素
    echo ${array_name[@]}# 获取所有元素
     # 增加元素
    

    条件判断

    a=5
    if [ $a == 5 ];then # []内部必须有空格
        echo a=5
    fi
    if [ $a == 5 ];then echo a=5;fi # 写成一行
    
    if [ $a -gt 0 ];then
        echo a>0
    else
        echo a<=0
    fi
    
    if [ $a -lt 0 ];then
        echo a<0
    elif [ $a -lt 5 ];then
        echo 0<=a<5
    elif [ $a -lt 10 ];then
        echo 5<=a<10
    else
        echo a>10
    fi
    

    表达式

    文本测试

    -d 是否目录    -e 是否存在    -f 是否文件  
    -r 是否可读    -w 是否可写    -x 是否可执行    
    
    if [ -d /usr/bin ];then echo /usr/bin is dir;fi
    

    逻辑测试

    if [ -e /etc/fstab ] && [ -e /usr/bin ];then echo ok;fi    # 逻辑与
    if [ -e /etc/fstab ] || [ -e /usr/bin ];then echo ok;fi    # 逻辑或
    if [ ! -e /etc/nopath ];then echo ok;fi                    # 逻辑非
    注意 ! 逻辑非适用于所有表达式
    

    整数操作

    -eq 是否相等    -ne 是否不等    -gt 是否大于    -lt 是否小于    
    -le 是否小于等于    -ge 是否大于等于
    
    [ 10 -eq 15 ]
    echo $?
    
    运算符 + - * / % == != 
    num1=$[1+2]         运算
    num2=$[$num1*3]
    num3=`expr 1 + 2`
    if [ $[1+2] == 3 ];then echo ok;fi
    if [ $[3*1] == 3 ];then echo ok;fi
    if [ $[7%4] == 3 ];then echo ok;fi
    <   >  
    if [[ 10 < 11 ]];then echo ok;fi # 注意两层[]
    

    字符串

    -z 是否空    -n 是否非空    = 是否相等    != 是否不等  
    a=xyz
    if [ $a != abc ];then echo ok;fi
    
    == 相等    =~ 正则匹配
    a=aa12345
    if [[ $a =~ ^aa[0-9]{5}$ ]];then echo ok;fi # 注意两层[],检测前缀后缀常用
    

    流程

    for i in {1..10};do echo $[$i*$i];done
    
    arr=(1 2 3)
    for i in ${arr[@]};do echo $[$i*$i];done
    arr=(s1 s2 s3)
    for i in ${arr[@]};do echo test_${i};done
    
    for i in `cat /etc/hosts`;do echo line $i; done
    for i in $(cat /etc/hosts);do echo line $i; done
    
    int=1
    while(( $int<=5 ))
    do
        echo $int
        let "int++"
    done
    

    函数

    1.sh=>
    function test {
        echo test argc=$#,arg1=$1,arg2=$2,arg3=$3
    }
    function testret1 {
        echo 123
    }
    function testret2 {
        return 456
    }
    
    echo main argc=$#,arg1=$1,arg2=$2,arg3=$3
    test 1 2 3
    testret1
    echo test=$? # 打印testret1返回值整数
    echo test=$(testret2) # 取testret2函数输出字符串
    
    ./1.sh a b c
    

    相关文章

      网友评论

          本文标题:shell教程

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