zoukankan      html  css  js  c++  java
  • SHELL基础

    1、ls命令

    -a    all显示隐藏文件
    -F    classify区分显示文件类型,若为目录则会在末尾添加一个/
    -h    human以容易查看的方式显示大小,即使用K、M、G作为单位
    -i     inode显示每个文件的inode
    -l     list显示长列表
    -r     reverse反向显示,该属性常与t-时间,S大小等联合使用
    -R    recursive循环显示子目录
    -s     size显示文件块大小
    -S    sort-size以文件大小排序
    -t     sort-time以时间进行排序
    -u    显示上次查看时间,而不是修改时间

    2、cp命令

    -l    创建硬链接
    -p    保留文件属性

    3、ln命令

    创建一个软链接。

    ln -s sourceFile destFile

    4、df命令

    df -h 可以方便的查看各挂载点的磁盘空间

    5、du命令

    用于查看目录下的所有文件、目录占用的空间信息。

    -c     生成所有已列出文件的汇总(将当前目录所有内容汇总成一个total)
    -h     以可读的方式显示所占用空间
    -s     汇总各自变量(如将目录汇总成一项)
    du -sh * #统计当前各目录项所占空间

    6、sort命令

    排序命令,可以直接指定文件,然后可以按照排序输出文件内容(默认按照字典顺序)

    -n     转换成数值进行排序(每行的前面部分会被转换成字符,然后排序)
    -o     保存输出到文件中
    -r     反转排序
    -f     忽略大小写
    -u     指定排序的唯一,重复的只显示第一条记录
    -s   禁止重排序(默认排序完成一个字段后会继续排序其他字段)
    -k pos1,[pos2] 根据pos1进行排序,并且在pos2位置结束 -t 与-k选项联合使用,指定用于分割字段的字符

    sort  -t : -k 3 -r /etc/passwd  则将文件按照:进行分割,然后按照第三个关键字进行反转排序

    du -sh * | sort -nr 先使用du命令合并输出,然后采用数值解释进行反转排序

      1) 默认情况下,sort依次对各字段进行排序(使用asc字符顺序),排完第一,排第二,依次类推

      2)采用数值排序,使用-n选项,若使用-k指定排序字段,只有首个字段能够按照数值,如:

        sort sortfile.txt -k2,3n  ///本意,指定按照2,3两个字段数值排序,但是只对第二字段数值排序,第三字段采用字符排序

        sort sortfile.txt -k2n -k3n  ///采用两个-kn命令来实现上述效果

      3)禁止重排,默认按一个字段排序后,还会调到其他字段继续排序,可以使用-s

    7、grep命令

    用于搜索文件中匹配模式的行

    -v     搜索不匹配模式的行
    -n     同时显示行号
    -c     统计符合条件的行数
    -e     搜索的模式,可以使用多个该选项指定多个搜索模式
    --binary-files=text
    用于搜索二进制文件时

    8、date命令

      1)打印日期  date +%Y%m%d%h%m%s

      2) 日期计算  date -d "[+-] year/month/day/hour/min/sec"  

    8、压缩文件

    bzip2    .bz2, 压缩、查看、解压(bzip2,bzcat,hunzip2)
    gzip      .gz, (gzip,gzcat,gunzip)
    zip        .zip  (zip,unzip)
    tar 命令
    tar -cvf filename.tar filename
    tar -xvf filename.tar 
    tar -xzvf filename.tar.gz / filename.tgz
    tar -tf filename.tar 列出文件包的内容,但是不解压

    9、环境变量

      分为本地环境变量与全局环境变量。

      1)printenv用于显示全局环境变量、set用于显示所有环境变量

      2)设置本地环境变量直接使用 xxx=xxx即可(注意等号两边不能有空格,等号右边若有空格需要使用引号),使用 $xxx方式引用,使用export xxx方式导出到全局环境变量,unset用于删除环境变量

      本地环境变量只在当前bash进程有效,而全局在自身以及子进程中都有效。

      3)数组 xxx=(xx,xx,xx),使用echo $xxx只引用第一个值,echo ${xxx[1]},echo ${xxx[*]} 用于引用其他值与所有值。

      4)登陆shell发布的环境变量

    复制代码
    登陆shell时:
    /etc/profile
    $HOME/.bash_profile
    $HOME/.bash_login
    $HOME/.profile
    
    交互式shell时:
    $HOME/.bashrc
    复制代码

      5)交互式读取变量

    echo -n "Please enter you name:"
    read name
    echo "Your name is :"$name

      6)读取文件行到变量之中

      read variable 默认从标准输入读取一行保存到variable之中,但是可以使用输入重定向将文件一行行地读取到变量中。

    read message < ./nor.log   ##只能读取一行保存到变量中
    
    while read message
    do
        echo $message
    done < ./nor.log     ##使用输入重定向循环读取

      7)命令替换

        var=`express`  

        var=$(express)

      8)预定义变量

        PPID 父进程ID

        $$ 自身的进程ID

        RANDOM 产生在0~32767之间的随机数

        SECONDS 返回shell运行经过的秒数

        HOME 当前用户的主目录

        IFS (Internal Field Separator)当成空格使用的字符集合(用于分隔符)  IFS=$' '  IFS=":"

    10、关于文件权限

      对于新创建的文件都有一个权限,这个权限可以通过umask来设置。

      umask表示要屏蔽的权限。

      权限的读、写、执行,分别为1、2、4,因此若一个文件具有这三个权限也就是8;

      创建时文件的权限最大为666(没有执行权限,执行权限需要通过chmod +x 方式添加),然后减去umask的值,最终就得到新创建文件的权限。

      创建时目录的权限最大为777,然后减去umask的值,最终就得到新创建目录的权限。

     
    初级脚本
     

    1. 基本脚本编译

    1)使用逗号可以分隔多条命令同时执行 date ; who

    2)SHELL脚本

    首行为  #!/bin/bash

    使用echo显示消息,默认每次显示后添加换行符,可以使用 -n 参数禁止

    提取变量使用$前缀,赋值直接引用名称即可

    使用反引号,可以将其中命令的输出赋值给变量

    重定向:>,>>,   <表示将文件内容作为输入,
      command << marker
      data
      marker  表示将两个marker之间的数据作为输入

    数学计算

    计算整数:使用bash表达式如  $[] 中括号中的表达式将被计算

    计算浮点:使用bc命令

    echo  “” | bc  将引号中的数据传递给bc
    var=`bc << EOF
        expressions
        EOF
    `

    脚本的退出状态,在执行完一条命令后使用 $? 可以查看,在脚本中可以使用exit code指定退出状态。

    3、基本的if-else语句

    复制代码
    if command
    then
        commands
    else
        commands
    fi

    也可以放在同一行,但是在if语句后,then语句后都需要添加分号:
    if [ 10 -le 11 ]; then echo "le"; fi
    
    
    复制代码

    默认if检查command命令执行的退出状态,若为0则表示条件符合执行then后面的语句。

    嵌套方式:

    复制代码
    if command
    then
        commands
    elif command2    #嵌套了一个elif语句判断与if一样
    then
        commands
    fi
    复制代码

    4、条件判断

    使用test或者中括号(左右都需要留出空格)

    if [ condition ]
    then
        commands
    fi

    1)整数比较  -eq、-ge、-gt  等于、大于等于、大于;

      -ne、-le、-lt 不等于、小于等于、小于

    2)字符串比较  =、!=、<, > , -n(长度大于零), -z(长度等于零)

      注意:大于小于号需要使用转义符号

      比较依据ASC2编码进行(小写大于大写),而sort正好相反。

    3)文件比较

    -d file 是否存在目录
    -e file 检查file是否存在
    -f file  是否存在文件
    -s file 文件存在并且不为空
    -r -w -x 文件存在以及权限检查
    file1 -nt file2 比较file1是否比file2新  -ot 相反

    4)符合条件检查  [] && [] 或者 [] || []

    5)使用双圆括号进行高级数学计算,使用双中括号可进行模式匹配

     5、case命令

    三、case命令

    case variable in
    pattern | pattern) command;;
    pattern) command;;
    *) default commands;;
    esac
    #注意每个匹配结束执行的命令后需要使用两个分号

    四、for命令

    for var in list
    do
        commands
    done

    list里面是一个列表,var将依次从其中取值,然后执行commands。

    列表中的值默认采用空格进行分割,若是对字符串按单词分割则要注意单引号与双引号(可使用转义符号)。

    复制代码
    改变字段分隔符
    默认字段分隔符为:空格、制表符、换行符
    可通过修改IFS环境变量
    IFS=$'
    '
    
    IFSOLD=$IFS
    IFS=$'
    '
    commands
    IFS=$IFSOLD
    复制代码
    复制代码
    使用目录通配符
    for file in /Users/zhongchangshou/Documents/workspace/shell/*
    do
        if [ -d "$file" ] ;then echo "$file is a directory";
        elif [ -f "$file" ] ;then echo "$file is a file";
        fi
    done
    
    #注意:得到的file可能包括空格,因此在用于判断时应该加上引号,作为整体
    复制代码

    五、while/until命令

    while test command
    do
        other commands
    done
    until test commands
    do
        other commands
    done
    
    #while与until的区别仅仅在于条件的判断上,until在判断返回false执行,while相反
      
     
     
  • 相关阅读:
    数据分析之可反复与独立样本的T-Test分析
    朗朗上口的两幅对联
    mysql编码、数据表编码查看和改动总结
    2014-04-19编程之美初赛题目及答案解析
    测试集群模式安装实施Hadoop
    笔记:常用排序算法
    笔记:常用排序算法
    安装Redis并测试
    常见架构风格举例总结
    转载:PostgreSQL SQL的性能提升
  • 原文地址:https://www.cnblogs.com/chang290/p/3524547.html
Copyright © 2011-2022 走看看