Linux学习笔记-bash(鸟哥11章 老段视频笔记)

11章shell

shell的介绍

shell 对命令进行翻译。转移器。把命令翻译成cpu可以都懂的语言。

打开终端的时候会链接到一个shell中,即链接到shell进程中。

  • Shell 类型

    cat /etc/shells

    直接输入名字可以直接切换

    [远程桌面传播的是图片]

  • 查找命令所在的路径

    which ls

    /bin/ls #ls是在/bin目录下的

    type cd 查看命令类型

    cd is a shell builtin

    cd是shell内置的命令。不能使用which进行查看。可以使用type查看类型

shell 变量

变量基础

  • 声明变量:

    • 本地变量,在子shell无效。

      变量名=值 # ‘=’两边不要有空格

    • 环境变量,会影响子shell

      export yy=10

    declare -x zz=10

    变量名:不能以数字开头,由字母、数字、_ 组成

  • 取消变量:

    unset 变量名

    • declare +x zz 环境变量变成本地变量
  • 查看变量

    set

    env export export -p显示所有的环境变量

  • 输出变量

    输出第12个参数:echo ${12}

    特殊的变量

    脚本中:

    0 # 表示参数格个数
    $* 表示所有参数

    命令行中:

    HOME USER 当前用户名
    HISTFILESIZEhistory PS1 输入命令的前面那个[root@www ~]
    PS2> LANG 默认编码

    locale -a 显示系统支持的编码

变量键盘读取,数组与声明

  • 用read从键盘读取,脚本常使用
echo "请输入您的名字"
read name
echo "欢迎您 $name"

read -p "请输入您的名字" name

read
  88
echo $REPLY     #输出88
  • 数组array

    xx=(aa bb cc dd)

    echo ${xx[0]} 输出aa

    echo ${xx[@|*]} 查看所有元素

    echo ${!xx[@]} 查看下标

    echo #{!xx[@]} 查看个数

  • delare

    • 设置只读的变量

      declare -r aa

    readonly bb

  • 更好的变量引用方法: echo ${xx}

xx=book 
echo '$xx'						直接输出字符串:$xx
echo "$xx"                         输出book
echo "我买了10本${book}s"        输出:我买了10本books
  • 嵌套命令的执行
echo "xxx`hostname`xxx"
echo "xxx${hostname}xxx"

对文件系统及程序的限制关系 ulimit

ulimit -a           #查看所有的大小限制
ulimit -f 20480      #设置创建文件大小限制20M 

变量内容的删除、替代和替换

删除\

path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/bin:/usr/local/games"
r=${path#*usr/bin}     #从开头删除,删到第一个usr/bin
echo $r        #输出:/sbin:/bin:/usr/games:/usr/local/games:/usr/bin:/usr/local/games
r=${path##*usr/bin}        #从最后的usr/bin开始删,删到开头
echo $r                    #输出:/usr/local/games
r=${path%bin*}         #从最后一个开始往后删
echo $r                    #输出:前面没变化……/usr/
r=${path%%bin*}            #从第一个bin往后删,
echo $r                    #输出/usr/local/s

替换

  • 删除变量 unset xx

  • 判断变量是否存在:

    r=${XX-"AAAA"} xx存在则将xx赋给r,否则将AAAA赋给r

    r=${XX:-"AAAA"} xx存在且不为空值则将xx赋给r,否则将AAAA赋给r

    r=${XX:="AAAA"} xx存在且不为空值则将xx赋给r,否则将AAAA赋给r和xx

    r=${XX:?"AAAA"} xx存在且不为空值则将xx赋给r,否则将AAAA输出

    r=${XX:+"AAAA"} xx存在且不为空值则将AAAA赋给r

  • alias aa=”ifconfig eth0” 给ifconfig eth0起个简称

  • unalias aa

  • 快速调用历史命令 !编号

  • 清除历史命令 history -c

操作环境

命令环境

echo 输出自带换行符。

echo -n xxxx 本次输出舍弃换行符

alias echo='echo -n' 以后的echo调用都没有换行符

!echo是命令。,也是一个别名,到底执行的哪一个呢?

可以通过type -a echo 进行查看,优先顺序从上到下

echo is aliased to `echo -n’
echo is a shell builtin
echo is /bin/echo

登陆前后信息

  • 登陆前信息

    vim /etc/issue

    【-d 指明当前日期】

  • 登陆后信息

    vim /etc/motd

  • 通过talnet登陆的提示信息

    vim /etc/issue.net

bash环境配置文件

login-shell和no-login-shell

  • login-shell

    登陆时候使用的shell

    会执行以下脚本

    • /etc/profile 环境中的所有全局变量
    • /etc/profile.d 别名的设置
    • /etc/inputrc 快捷键设置
  • 进入用户家目录 ~ 时候会执行 ~/.bash_profile

    只对当前用户有效

  • no-login-shell 不需要输入密码登陆的shell

终端机环境设置

  • stty快捷键设置

  • set

    set -u 开启检查变量是否被定义。

    set +u 关闭检查变量存在

    set +x 跟踪所有的操作

    set -x 提供更新功能

通配符

E.g. 找出文件名符合的文件:字母,数字,都可,非数字

ls [a-z][1-9]?[!0-9]*.mp3

  • []一对中括号匹配一个字符

    [a-z] 匹配26个小写英文字母。

    [a\-z]匹配 a,,z

数据流重定向

  • 输出重定向.所有的输出默认是输出在屏幕上。修改保存地址

    • > 将输出放到文件中, 覆盖(只能重定向错误的结果)
    • >> 追加(只能重定向正确的结果)
    • 2> 错误结果去覆盖
    • 2>> 追加错误结果
    • &> 正确错误全都重定向
    • cal 2> hosts 1>&2正确的像错误的一样进行导入
    • xxx cal>hosts 2>&1 错误的像正确的一样进行导入
  • 输入重定向<

    tr 'a-z' 'A-Z' < hosts

  • here文件中<< 设置输入结束字符。

    可以任意写文档,一直到输入<< 右侧的符号结束

    here可以识别变量

命令执行判断依据

  • 分号; 顺序执行命令

  • $? 记录命令正确(0)还是错误(非0)。

  • && 与

  • || 或

管道pipe

命令1 | 命令2 |命令3 将命令1执行结果最为命令2的执行参数

ifconfig eth0 | tee xx |grep 'inet addr'

将ifconfig eth0的输出结果传给命令tee,结果保存到xx中,并将这个结果当成grep的输入

tee xx保存结果只保存最后一次,想要继续追加:

ifconfig eth0 | tee -a xx |grep 'inet addr'

选取命令

  • cut -d: -f 1 文件名

    -d 指明分隔符:

    -f 指明查看部分

  • grep 过滤

    grep 选项 关键字 filename

    grep -i tom passwd

    -i 忽略大小写

    -n加行号

    -v反向过滤,输出不含有关键字的行

    -A3过滤关键字那一行,并过滤下面的3行

    -a3过滤关键字那一行,并过滤上面的3行

排序命令

  • sort

    sort -n -r

    ​ -n按照数字形式排序,默认从小到大

    ​ -r从大到小排序

    sort -t: -k3 passwd -t指明分隔符,-k指明第几部分passwd的第三部分进行排序

    sort -t -n: -k3 passwd -n以数字形式排序

    sort -u -u去重

  • uniq

    uniq 去重排序,相当于sort -u

    uniq -c 统计重复出现的次数

  • wc字符统计

    输出:行号 单词数 字符数

    wc -l xx 行号
    wc -w xx 单词数
    wc -c xx 字符数

    • 统计一个文件夹有多少个目录

    ls -l / | wc -l

字符转换

  • 字符转换tr

    tr 'a-z' 'A-Z' < hosts

    ​转换之后覆盖原文件:

    tr 'a-z' 'A-Z' < hosts > xxx   
    mv xxx hosts   

    错误做法:tr 'a-z' 'A-Z' < hosts > hosts

    这两个命令等同
    tr 'a-z' 'A-Z' < host
    cat hosts | tr 'a-z' 'A-Z'

​ 删除tr -d

cat passwd | tr -d ':' 输出删除:的passwd

  • 字符转换col,expand

    tail -7 /etc/man.config | cat -A 把符号显示出来

    ^I 表示tab键 $表示一行结束

    tail -7 /etc/man.config | col -x 把tab转成空格

    tail -7 /etc/man.config | expand

  • 粘贴命令jion和paste

    paste aa bb 将aa 和 bb 文件粘贴在一起

    join 默认是空格作为分割符

    aa bb

    a123 a345
    b123 b289
    c123 a114

    join -t ":" aa bb -t指明分隔符

    a123:345
    b123:289

    join -t ":" -1 1 aa -2 3 bb 第1个文件的第一部分和第2个文件的第3部分join

    a123:114

  • 分割文件 split

    • 按块分割

    split -b 10k /etc/services xxx 把/etc/services文件分成每份10k,以xxx开头命名

    cat xxx* >services 将文件重新组成service

    • 按行分配文件

    split -l 100 /etc/services xxx 100行分配成一个文件

  • 参数代换xargs

    常和find结合

    find -name 'file*' 查找以file开头的文件

    find -name 'file*' | xargs ls -l 显示以file开头的文件的文件信息

  • -减号作用

    tar cvf home.tar /home | tar xvf 压缩生成home.tar并解压

    tar cvf - /home | tar xvf - 不生成home.tar压缩文件直接解压

补充

  • echo $$ 进入子shell

  • \是回车

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值