鸟哥的Linux私房菜笔记-bash

文章目录

  1. 1. bash
    1. 1.1. type
    2. 1.2. env
    3. 1.3. export
    4. 1.4. declare
    5. 1.5. ulimit
    6. 1.6. read
    7. 1.7. 删除
    8. 1.8. 替换
    9. 1.9. 初始化
    10. 1.10. alias&unalias
    11. 1.11. history
    12. 1.12. PS1
    13. 1.13. 登陆
    14. 1.14. source
    15. 1.15. grep
    16. 1.16. egrep
    17. 1.17. sed
    18. 1.18. awk
    19. 1.19. cut
    20. 1.20. diff
    21. 1.21. cmp
    22. 1.22. patch
  2. 2. shell script
    1. 2.1. test
    2. 2.2. seq
    3. 2.3. 计算
    4. 2.4. 脚本相关变量
    5. 2.5. shift
    6. 2.6. 判断执行结果
    7. 2.7. sh
    8. 2.8. 判断式

笔记记录于《鸟哥的Linux私房菜-第三版》,以备多看。

bash

type

  • -t #查看指令类型
  • -a #显示PATH中所有指令

    env

  • 查看当前环境变量

    export

  • 将自定义变量导入当前环境(子程序)

    declare

  • declare -i num=$RANDOM*10/32768 #选取0-9随机数
  • -x variable #将变量导入环境变量
  • -r variable #只读变量
  • +x variable #取消导入到环境变量(除 a,r 不会取消)

ulimit

  • -a 显示配额

    read

  • -p “提示信息” variable

  • -t 30 variable #限定时间

    删除

  • echo ${PATH#/*:} #从左向右删最短

  • echo ${PATH##/*:} #从左向右删最长

  • echo ${PATH%/*bin} #从右向左删最短

  • echo ${PATH%%/*bin} #从右向左删最长

    替换

  • echo ${PATH/sbin/SBIN} #从左到右替换第一个匹配

  • echo ${PATH//sbin/SBIN} #从左到右替换全部匹配

    初始化

  • new_var=${old_var-default_var} #old_var未赋值则赋值为default_var

  • new_var=${old_var:-default_var} #old_var 未赋值或赋值为空字符串 则赋值为default_var

  • new_var=${old_var=default_var} #效果同上,只是old_var也会被修改

  • new_var=${old_var:=default_var} #效果同上,只是old_var也会被修改

    alias&unalias

    history

  • !num #第几条历史操作

  • !! #上一条操作

  • !cmd #最近一条cmd开头操作

    PS1

  • PS1=’[\u@\h \t \W]$ ‘ #用户状态

    登陆

  • /etc/issue #进站信息

  • /etc/motd #欢迎信息

  • /etc/profile #系统配置

  • ~/.bash_profile | ~/.bash_login | ~/.profile #个人配置

  • 最终操作的文件是 ~/.bashrc ,所以个人设置可以放里边

    source

  • source ~/.bashrc #读取配置当前环境

  • . ~/.bashrc #同上

    grep

  • cat file | grep -n -A2 -B3 ‘str’ #连搜索结果的前3行和后2行一起显示出来

  • cat file | grep -vn ‘str’ #反向搜索

  • cat file | grep -in ‘str’ #不分大小写

  • cat file | grep -n ‘[^[:lower:]]ar’ #非小写字母+ar; [:lower:]同[a-z]

  • grep -l ‘*‘ $(find /etc/ -type f) #查找/etc下包含*的文件

  • find /etc/ -type f|xargs -n 10 grep ‘*‘ #改良版,每次处理十个文件查找

    egrep

  • egrep -v ‘^$|^#’ file #列出非注释与非空白行

    sed

  • cat -n file|sed ‘2,5d’ #删除2-5行

  • cat -n file|sed ‘2a 添加到第2行后’ #行后添加

  • cat -n file|sed ‘2i 添加到第2行前再加一行’ # 行前添加

  • sed -n ‘2 w output.txt’ file #将内容 写入 output.txt

  • cat -n file|sed ‘2,5c 替换文字’ # 替换

  • sed -n ‘2,5p’ file #按行打印

  • cat -n t |sed -n ‘2~5p’ #按范围打印,第2行开始每隔5行

  • cat -n t |sed -n ‘/search/,+5p’ #匹配到search,再多打印5行

  • cat -n t |sed ‘s/搜索字符串/替换字符串/g’ #替换字符串

  • cat -n t |sed ‘/^$/d’ #删除空白行

  • sed -i ‘s/.$/!/g’ file #直接修改源文件,替换行尾的.为!

  • sed ‘s/^/ls -l /e’ files #替换并 执行

  • sed -i ‘$a 新增内容’ file #在文件末尾附加内容

  • sed -n -f sed-cmd-file file #执行文件中sed命令

  • cat file|sed -e ‘4d’ -e ‘6c replace 6th line’ #多条指令

  • sed ‘{

    s/Google/Github/
    s/Git/git/
    }' file #同上
  • sed ‘s/^./<&>/‘ file # “<>”包裹行 *&**

  • sed ‘s/Paul|Addy/[&]/g’ file # |需转义,sed中正则需转义字符

  • echo “string”|sed ‘s/string/S\LTRING/‘ # \L将后边字符小写;\l将后边第一个字符小写

  • echo “string”|sed ‘s/string/\Ustring/‘ # \U将后边字符大写;\u将后边第一个字符大写

  • echo “string”|sed ‘s/string/\Us\Etring/‘ # \E能打断\L或者\U改变大小写

  • sed –in-place=bak ‘s/Ian/IAN/‘ source.txt # 边替换边备份
    sed -ibak ‘s/Ian/IAN/‘ source.txt

  • sed ‘y/AB/ab/‘ file # 转换字符

    awk

  • last -5|awk '{print $1 "\t" $3}’ #截取用户和ip格式化显示

  • last -5|awk '{print $1 "\t" line:"NR" "\t" col:"NF"}' #截取用户和ip格式化显示

  • last -5|awk '{print $1 "\t line:"NR "\t col:"NF "\t delimiter:"FS}' #内置变数

  • cat /etc/passwd|awk 'BEGIN{FS=":"} $3<10 {print $1 "\t" $3}' #预设分隔符,并取出UID<10的用户名

  • cat pay.txt|awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"};NR>=2{total=$2+$3+$4;printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,total}' #计算总合,”;”可用 enter 替换

    cut

  • -d ‘分隔符’ -fN #默认tab分隔,N为第几列

    diff

  • -b #只是空白不同不列出

    cmp

  • -s #不同位置都列出来

    patch

  • diff -Naur t t2 >t.patch #生成patch

  • patch -pN < file.patch #更新旧档案,N代表要去掉几个 "/"

  • patch -R -pN < file.patch #还原旧档案

    shell script

    test

  • test -z str #判断字符串是否为空

  • [ -z "$HOME" ];echo $? #注意空格

  • test -e filename && echo 'exist' || echo 'not exist' #判断文件是否存在

    seq

  • seq start end #生成一个end-start的range数组

    计算

  • $((cal_expr))

    脚本相关变量

  • $0 #脚本名

  • $# #脚本参数个数

  • $@ #全部脚本参数,空格分隔

  • $1 #第一个参数

  • $$ #bash的PID

    shift

  • shift N #偏移几个,参数从左到右拿掉几个

    判断执行结果

  • ping -c 1 -w 1 192.168.1.1 &>/dev/null && result=0 || result=1

    sh

  • sh -n file.sh #检查语法

  • sh -v file.sh #执行前吧内容输出

  • sh -v file.sh #将使用到的script内容输出

    判断式

  • if

    if ;then
    fi
    ---
    if ;then
    elif ;then
    fi
    ---
    if ;then else
    fi
  • case

    case $var in
    "case1")
        ...
        ;;
    *)  #default
        ...
        ;;
    esac
  • while

    while [cond]
    do
        ...
    done
  • until

    until [cond]
    do
        ...
    done
  • for

    for v in $arrs
    do
        ...
    done
    ---
    for((i=1;i<$nu;i=i+1))
    do
        ...
    done
如有疑问,请文末留言交流或邮件:newbvirgil@gmail.com 本文链接 : https://newbmiao.github.io/2015/09/15/Niaoge-Linux-Desktop-Guide-notes-bash.html