linux shell笔记

Bash
查看系统支持的shell
cat /etc/shells
shell变量
1.单引号双引号区别
单引号保留原始字符
双引号则继续下探
2.查看环境变量set、env
set 用来显示本地变量(set-x set +x  用于脚本调试)
env 用来显示环境变量
export 用来显示和设置环境变量
3.read -p 'please input your name' -t 2 username
  echo username
4.array[0]
数组定义
a=(1 2 3 4 5)
echo $a
一对括号表示是数组,数组元素用“空格”符号分割开。
数组读取与赋值
用${#数组名[@或*]} 可以得到数组长度
echo ${#a[@]}
读取
用${数组名[下标]} 下标是从0开始  下标是:*或者@ 得到整个数组内容
echo ${a[2]}
echo ${a
  • }
  • 赋值
    直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素
    a[1]=100
    echo ${a
  • }
  • 删除
    直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。
    a=(1 2 3 4 5)
    unset a
    echo ${a
  • }
  • a=(1 2 3 4 5)
    unset a[1] 
    echo ${a
  • }
  • echo ${#a
  • }
  • 命令别名与历史
    history 100 > hiscmd.txt
    命令别名
    alias lla='ls -la'
    数据流向
    数据流重定向
    标准输入 stdin 0
    标准输出 stdout 1
    标准错误输出 stderr 2

    find /home/ -name .bash_profile >ok 2>error
    find /home/ -name .bash_profile >log 2>log
    find /home/ -name .bash_profile >>log 2>>log
    find /home/ -name .bash_profile >log 2>&1
    find /home/ -name .bash_profile &>log
    find /home/ -name .bash_profile >ok 2>/dev/null

    cat >1.txt

    cat >2.txt<<end
    aa
    bb
    end

    cat >2.txt <1.txt

    管道
    find命令
    find dir
    -name 指定文件名
    -size指定大小
    -type类型 f文件 d目录
    -o 或
    -a 与
    -not 非
    例:查找当前目录文件大小为2-6M的文件
    find . -type f -size +2M -a -size -6M

    cut -d'分隔符' -f 5 文件
    例:将path变量取出,取出第五个

    sort wc uniq

    xargs
    用管道前的输出结果作为管道后的命令的输入参数
    cut -d: /etc/passwd -f 1 | xargs mkdir
    例:
    查找当前目录下大于5M的文件,将其拷贝到指定目录
    find . -type f -size +5M -a -size 10M | xargs -i cp {} /root/xargs/{}

    grep
    分析一行的信息
    -i 忽略大小写
    -n 输出行号
    -v 反向选择

    shell脚本(鸟哥)

    正则表达式
    通配符
    * 代表0到多个
    ? 代表有且只有一个
    + 1个到多个
    [] [1,a,4,d]
    [0-9]
    [^] [^xyz]

    基础正则
    .
    *
    ^
    $
    []
    \
    扩展正则
    {n} 只能出现N次
    {n,}
    {n,m}

    +

    |
    ()

    grep 'a$' demo.txt

    使用扩展正则三种方式
    1.使用转义 \
    2.使用-E
    3.使用egrep
    grep 'o\{2\}' demo.txt
    grep -E 'o{2}' demo.txt
    egrep 'o{2}' demo.txt


    Awk、sed与grep,俗称Linux下的三剑客
    sed awk
    Awk、sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以匹配文本,其中sed和awk还可以用于文本编辑,而grep则不具备这个功用。sed是一种非交互式且面向字符流的编辑器(a "non-interactive" stream-oriented editor),而awk则是一门模式匹配的编程语言,因为它的主要功能是用于匹配文本并处理,同时它有一些编程语言才有的语法,例如函数、分支循环语句、变量等等

    1.通过-F参数设置冒号:为分隔符,并打印各个字段
    echo "1:2:3" | awk -F: '{print $1 " and " $2 " and " $3}'
    1 and 2 and 3
    2.可以通过-F选项来修改默认的字段分隔符,例如/etc/passwd的每一行都是由冒号分隔成多个字段的,所以这里就需要将分隔符设置成冒号:
    awk -F: '{print $1}' /etc/passwd | head -3
    root
    bin
    daemon

    hive sql

    你可能感兴趣的:(Linux shell)