zoukankan      html  css  js  c++  java
  • shell的一些简单用法

    一 BASH的属性
    BASH中会存储一些自身属性的参数,启用或关闭某一项功能
    例如控制* .字符是否为通配
    查看参数 set -o
    关闭noglob参数
    set -o noglob
     ls *
    ls: *: 没有那个文件或目录

    set +o noglob
    ls *

    固化设定
    我们前面所学习的更改变量 属性等等都是在内存中修改 机器重新启动后就会恢复默认值
    那么怎么固化这些设置 让他们永久生效呢?
    这就需要了解BASH两种类型
    1.登录shell 2.非登录shell
    登录shell
    就是通过输入用户名 密码后 或 su - 获得的shell
    非登录shell 则是通过bash命令和脚本开启的shell环境
    那么他们有什么区别呢?和我们固化设定又有什么关系呢?
    我们知道在linux里一切皆为文件,同样,shell的属性加载也是写到文件里的
    在登陆时就会加载对应文件的内容来初始化shell环境,
    非登录与登录区别就在于加载的文件不同 从而导致获得的shell环境不同
    我们看看登录shell都加载了那些文件
    --> /etc/profile
    --> /etc/profile.d/*.sh
    --> $HOME/.bash_profile
    --> $HOME/.bashrc
    --> /etc/bashrc
    再看非登录shell加载的文件
    --> $HOME/.bashrc
    --> /etc/bashrc
    --> /etc/profile.d/*.sh
    可见,非登录shell加载的文件要少很多
    那么我们想要固化一个配置时在哪种登录下生效,就显而易见的知道该写在哪个文件里了
    通常,我们会将环境变量设置在 $HOME/.bash_profile 中
    如果不管哪种登录都想使用的变量 就设置在 $HOME/.bashrc中

     命令补齐TAB键
    简化输入 提示 防止书写错误

    历史记录
    上下键查
    history 查询 用!ID 调用
    ctrl+r 输入匹配

    快捷键
    CTRL+A 行首
    CTRL+E 行尾
    CTRL+U 删除自光标到行首串
    CTRL+K 删除自光标到行尾串
    CTRL+L 清屏

    二 什么是正则

      1 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说是用来描述一类事物的规则。

     2 在linux中,通配符是由shell解释的,而正则表达式是由命令解释的。

    三 grep命令

      1 相关的参数

     -n  :显示行号

     -o  :只显示匹配的内容

    -q  :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容

    -l  :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc

    -A  :如果匹配成功,则将匹配行及其后n行一起打印出来

    -B  :如果匹配成功,则将匹配行及其前n行一起打印出来

    -C  :如果匹配成功,则将匹配行及其前后n行一起打印出来

    --color
    -c  :如果匹配成功,则将匹配到的行数打印出来

     -E  :等于egrep,扩展

    -i  :忽略大小写

    -v  :取反,不匹配

     -w:匹配单词

    2 grep的种类

    grep
    fgrep
    pgrep
    egrep

    3正则介绍

    ^ 行首
    $ 行尾
    . 除了换行符以外的任意单个字符
    * 前导字符的零个或多个
    .* 所有字符
    [] 字符组内的任一字符
    [^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
    ^[^] 非字符组内的字符开头的行
    [a-z] 小写字母
    [A-Z] 大写字母
    [a-Z] 小写和大写字母
    [0-9] 数字
    < 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
    > 单词尾

    扩展正则 sed 加 -r 参数 或转义
    grep 加 -E 或 egrep 或转义
    AWK 直接支持 但不包含{n,m}
    可以使用--posix支持
     awk '/ro{1,3}/{print}' /etc/passwd
     awk --posix '/ro{1,3}/{print}' /etc/passwd
    sed -n '/roo?/p' /etc/passwd
    sed -rn '/roo?/p' /etc/passwd
    ? 前导字符零个或一个
    + 前导字符一个或多个
    abc|def abc或def
    a(bc|de)f abcf 或 adef
    x{m} x出现m次
    x{m,} x出现m次至多次(至少m次)
    x{m,n} x出现m次至n次
    posix定义的字符分类

    [:alnum:] Alphanumeric characters.
    匹配范围为 [a-zA-Z0-9]
    [:alpha:] Alphabetic characters.
    匹配范围为 [a-zA-Z]
    [:blank:] Space or tab characters.
    匹配范围为 空格和TAB键
    [:cntrl:] Control characters.
    匹配控制键 例如 ^M 要按 ctrl+v 再按回车 才能输出
    [:digit:] Numeric characters.
    匹配所有数字 [0-9]
    [:graph:] Characters that are both printable and visible. (A space is print-
    able, but not visible, while an a is both.)
    匹配所有可见字符 但不包含空格和TAB 就是你在文本文档中按键盘上能用眼睛观察到的所有符号
    [:lower:] Lower-case alphabetic characters.
    小写 [a-z]
    [:print:] Printable characters (characters that are not control characters.)
    匹配所有可见字符 包括空格和TAB
    能打印到纸上的所有符号
    [:punct:] Punctuation characters (characters that are not letter, digits, con-
    trol characters, or space characters).
    特殊输入符号 +-=)(*&^%$#@!~`|"'{}[]:;?/>.<,
    注意它不包含空格和TAB
    这个集合不等于^[a-zA-Z0-9]
    [:space:] Space characters (such as space, tab, and formfeed, to name a few).

    [:upper:] Upper-case alphabetic characters.
    大写 [A-Z]
    [:xdigit:] Characters that are hexadecimal digits.
    16进制数 [0-f]

    使用方法:
    [root@seker ~]# grep --color '[[:alnum:]]' /etc/passwd

    四 变量

    1 为何要有变量

    程序的运行就是一些列状态的变量->用变量值的变化去表示

    2 变量命名规则

    以字母或下划线开头,剩下的部分可以是:字母、数字、下划线.

    最好遵循下述规范:

    (1).以字母开头
    (2).使用中划线或者下划线做单词的连接
    (3).同类型的用数字区分
    (4).对于文件最好加上拓展名
    例如: sql_bak.tar.gz,log_bak.tar.bz2

    3系统变量

    set 和 env区别
    set:显示所有变量
    env:环境变量

    4 变量赋值

    VARNAME=VALUE
    echo $VARNAME
    删除变量 unset VARNAME

    5 常用系统变量

    PATH
    PWD
    LANG
    HOME
    HISTSIZE
    PS1
    IFS
    域分隔符 是空格,换行,TAB键的合集

    6 全局变量与局部变量

     gender='male' #在爹这个位置定义一个局部变量gender
     export money=1000 #在爹这个位置定义一个全局变量money
     bash #切换到子bash
     echo $gender #在儿子这里看它爹的局部变量gender,结果为空->看不到

     echo $money #在儿子这里看它爹的全局变量money,可以看到1000
     export hobby='piao' #在儿子这里定义一个全局变量hobby
     exit #退出,进入爹的bash环境
     echo $hobby #爹是看不到儿子的export的,儿子的儿子可以看到

    7 定义变量名的边界

     rest_mem=20
     echo ${rest_mem}%
    20%

     8 数据类型

    bash中的变量无须声明,拿来就用.默认的变量都会是字符类型,还可以有数字类型,普通的脚本,这两种类型够用了

    五 运算符

     1 算术运算符

    +

    -

    *

    /

    %

     echo $[3+1]
    4

     2关系操作

    与(())连用

    <

    >

    <=

    >=

    ==

    !=

    &&

    ||

    test命令相关,[]可以达到一样的效果
     x=1
     [ $x -gt 1 ]
     echo $?
    0

  • 相关阅读:
    MFC的初始化过程和消息映射技术
    一些函数
    对话框相关
    windows新的数据类型
    VC++函数(win32_exe)
    Visual C++基础知识(win32exe)
    Keil C减小代码编译量大小的方法(gai)
    CM3存储器系统
    SPI总线
    SMBUS(IIC)总线
  • 原文地址:https://www.cnblogs.com/fangjie0410/p/6934612.html
Copyright © 2011-2022 走看看