shell积累

作者: 二手三流科学家 | 来源:发表于2019-03-13 21:40 被阅读15次

首先,给出我的bash版本
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)

  1. 脚本中获取当前文件绝对路径:

    abPath=$(dirname $(readlink -f "$0"))
    abPath=$(cd "$(dirname "$0")";pwd)
    
  2. .bashrc中的配置

    alias ll='ls -AhFl --time-style='\''+%F %T'\'' --color=always'
    
  3. .vimrc中的配置

    set nu
    set smarttab
    set expandtab
    set tabstop=4
    set softtabstop=4
    set shiftwidth=4
    set ai
    set si
    set encoding=utf-8
    set fileencoding=utf-8
    set termencoding=utf-8
    
    
  4. 使用grep求两个文件的异同

    #给出`man`文档相关参数项
    #-f FILE, --file=FILE
    #Obtain  patterns  from  FILE,  one  per  line.
    #The empty file contains zero patterns, and therefore matches nothing. 
    #-F, --fixed-strings
    #Interpret  PATTERN as a list of fixed strings,separated by newlines,
    #any of which is to be matched.
    #找到FILE1和FILE2中共有的行
    grep -Ff FILE1 FILE2
    #找到FILE2中存在,FILE1中不存在的行
    grep -vFf FILE1 FILE2 
    
  5. 判断一个变量是否是整数的方法

    function isInt() {
        #$((${1} + 10)) &> /dev/null #这种不行
        #expr ${1} + 0 &> /dev/null #这种可行
        ((${1}+1)) &>/dev/null #这种办法可行
        if [ $? -eq "0" ] ;then 
            #echo 是整数
            return 0
        else
            #echo 不是整数
            return 1
        fi  
    }
    
    
  6. bash做逻辑运算的注意事项:

    #!/bin/bash
    
    [ 'abc'=='27789' ] && echo '字符串相等' || echo '字符串不相等' #输出字符串相等
    
    var=""
    [ -n $var ] && echo '不为空' || echo '空' #输出 不为空
    
    [ -n $undefinedVar ] && echo $undefinedVar不为空 || echo $undefinedVar为空 #输出$undefinedVar不为空
    #我的bash版本貌似不支持[[ 10 >= 8 ]] [[ 10 <= 8 ]]这样的表达式
    
    #总结:
    #尽量避免使用`(())`和`[[]]`语法做逻辑运算
    #使用整数做逻辑运算时,
    #使用`-eq`、`-lt`、`-gt`、`-ne`、`-ge`、`-le`操作符和`[]`语法
    #使用字符串做逻辑运算时,
    #使用`==`、`=`、`!=`、`-n`、`-z`操作符和`[]`语法
    #使用文件做逻辑运算时,
    #使用`[]`语法
    #`[]`左右两边和其内容之间一定要有空格,
    #逻辑表达式的操作符和操作数之间一定要有空格
    #使用字符串做逻辑运算,如果字符串是变量,一定要加双引号
    #`-a`、`-o`只能用于`[]`语法内部,`&&`、`||`还可以用户连接多个`[]`语法 
    
  7. ls递归遍历文件

    #!/bin/bash
    
    #传入一个目录,递归列出这个目录下的所有非目录文件
    #定义错误输出码
    #1 输入参数不是目录
    #2 输入参数个数不是一个
    
    function ls_file_r() {
        [ ! -d "${1}" ] && echo '请输入一个目录' && return 1
        [ "${#}" -ne 1 ] && echo '请输入一个目录' && return 2
      
        #local: can only be used in a function
        local dirname=$(echo ${1} | tr -s '/') #防止用户输入./sonemdir////这样的路径
        dirname=${dirname%/}
        [ -z "${dirname}" ] && dirname='/'
        funcname=${FUNCNAME[0]}
        for filename in $(ls  ${dirname}) 
        do  
            #未解决的问题,在有的目录下回出现死循环,一直输出相似的东西,比如/proc/
            #[ "$filename" == "proc" ] && continue
            if [ -d ${dirname}'/'${filename} ];then
                ${funcname} ${dirname}'/'${filename}
            else
                echo ${dirname}'/'${filename}
            fi  
        done
    }
    
    
  8. shell模拟PHParray_keys函数:

    #如果采用传参给函数的方式,会有如下问题
    #array_keys.sh:
    #!/bin/sh
    #array="$@" #这样可以接收几个空格分隔的字符串
    #array=("$@")  #这样可以接收到数组
    #调用脚本处:
    #sh test.sh ${someArr[*]} #这样传递进去的是数组,但是丢失了键值,在脚本中数组从0开始索引
    #sh test.sh "${someArr[*]}" #这样传递了一个空格分隔的字符串
    
    #基于以上原因,无法将这个功能封装为函数
    #array_keys.sh:
    #!/bin/sh
    array=([590]='abc' [73]='bbb' [3]=898)
    #shell会将数组按照键值大小自动排序
    count=${#array[*]}
    found=0     #计数器,记录当前找到了几个键
    search=0    #计数器,记录当前从零开始,已经测试到了多少
    ret=()      #存放键值的结果
    while [ $found -lt $count ]
    do
        if [ -n "${array[search]}" ];then
            found=$(($found + 1))   
            ret[found]=$search
        fi  
        search=$(($search + 1))
    done
    output=''
    for key in ${ret[*]}
    do
        output+="Key:${key}/Value:${array[key]}\n"
    done
    
    echo -e $output | column -s '/' -t  
    
    

相关文章

  • shell积累

    首先,给出我的bash版本GNU bash, version 4.2.46(2)-release (x86_64-...

  • Shell编程积累

    if语句中 =~ 的使用 此处判断属于正则表达式的匹配,只需要匹配上一部分就算完成匹配,比如ksever为v12的...

  • Linux 教程

    本系列文章介绍使用 Linux 操作系统的相关命令和操作,纯属个人积累,欢迎参考。 Shell 脚本 Shell ...

  • 知识积累--sql注入写shell

    简单记一下看见的五种写有sql注入的情况下如何写shell 原文链接:https://manning23.gith...

  • Shell 学习

    shell 变量 shell 参数传递 shell 数组 shell 运算符 shell echo 命令 prin...

  • Shell 概述

    学习 Shell 主要包括的内容: Shell 脚本入门 Shell 变量 Shell 内置命令 Shell 运算...

  • 既搞笑又高效的日常shell的脚本

    背景:在使用linux的时候,打开终端输入命令是最常做的事,时间长了基本积累有挺多的shell脚本文件,即便文件目...

  • Shell 教程

    Shell 变量 Shell 传递参数 Shell 数组 Shell 基本运算符 Shell echo 命令 Sh...

  • shell 第一天

    shell编程初识 1.1 shell编程初识 shell的定义 Shell 是命令解释器 Shell 也是...

  • shell 案例

    Shell编程一 Shell防范ARP攻击 Shell编程二 Shell防范DDos攻击 Shell编程三 ...

网友评论

    本文标题:shell积累

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