zoukankan      html  css  js  c++  java
  • shell(1)

    bash变量类别:

    本地变量 : 又叫局部变量,仅对当前shell进程有效

    环境变量 : 当前shell及其子shell,子子shell….

    特殊变量 : $?  上一个命令执行的状态,0表示执行成功。失败的代码有很多。

    zhangsan@huanghao-Virtual-Machine:/$ cm kk
    程序“cm”尚未安装。 如需运行 'cm',请要求管理员安装 'config-manager' 软件包
    zhangsan@huanghao-Virtual-Machine:/$ echo $?
    127
    zhangsan@huanghao-Virtual-Machine:/$ echo $?
    0

    变量赋值:

    zhangsan@huanghao-Virtual-Machine:/$ age=23
    zhangsan@huanghao-Virtual-Machine:/$ echo $age
    23

    将变量的值赋给另一个变量:

    zhangsan@huanghao-Virtual-Machine:/$ age=23
    zhangsan@huanghao-Virtual-Machine:/$ age1=$age
    zhangsan@huanghao-Virtual-Machine:/$ echo $age1
    23

    现在有个问题,执行上面代码后,age和age1的值各是多少?age1的值会不会随着age的变化而变化?下面将age新赋一个值 ,看一下

    zhangsan@huanghao-Virtual-Machine:/$ age=24
    zhangsan@huanghao-Virtual-Machine:/$ echo $age
    24
    zhangsan@huanghao-Virtual-Machine:/$ echo $age1
    23

    现看下面这段代码,当age的值存在时,把age的值赋给变量,不存在是将后面的值赋给变量

    zhangsan@huanghao-Virtual-Machine:/$ result=${age-40}
    zhangsan@huanghao-Virtual-Machine:/$ echo $result
    24
    zhangsan@huanghao-Virtual-Machine:/$ result=${age2-40}
    zhangsan@huanghao-Virtual-Machine:/$ echo $result
    40

    当age值存在时赋值,不存在时返回错误信息:

    zhangsan@huanghao-Virtual-Machine:/$ result=${age?'error'}
    zhangsan@huanghao-Virtual-Machine:/$ echo $result
    24
    zhangsan@huanghao-Virtual-Machine:/$ result=${age2?'error'}
    bash: age2: error

    想想上面的代码有什么用?试一下

    zhangsan@huanghao-Virtual-Machine:/$ result=${age3?'age3 does not exist'}
    bash: age3: age3 does not exist

    输出:

    echo $age
    echo "hello"
    #输出后不换行
    echo -n 'hello'   
    #让转义符生效
    echo -e 'hello	world'   
    echo -e "hello
    world"

    单引号: 强引用 ,引号里的字符串不论是什么,原封不动

    双引号: 弱引用,引号里的变量替换成变量的值

    反引号: 就是键盘上~下面的字符,命令替换

    zhangsan@huanghao-Virtual-Machine:/$ age=23
    zhangsan@huanghao-Virtual-Machine:/$ echo 'i am $age'
    i am $age
    zhangsan@huanghao-Virtual-Machine:/$ echo "i am $age"
    i am 23
    zhangsan@huanghao-Virtual-Machine:/$ echo "today is `date +%F`"
    today is 2016-01-25

    变量的引用

    ${varname}

    花括号有时可以省略,有时不行,看一下

    zhangsan@huanghao-Virtual-Machine:/$ age=23
    zhangsan@huanghao-Virtual-Machine:/$ echo $age
    23
    zhangsan@huanghao-Virtual-Machine:/$ animal=pig
    zhangsan@huanghao-Virtual-Machine:/$ echo "There are some ${animal}s"
    There are some pigs
    zhangsan@huanghao-Virtual-Machine:/$ echo "There are some $animals"
    There are some

    为什么最后面输出显示变量没有值?因为将animals识别成一个变量了。

    变量的撤销:

    zhangsan@huanghao-Virtual-Machine:/$ age=23
    zhangsan@huanghao-Virtual-Machine:/$ echo $age
    23
    zhangsan@huanghao-Virtual-Machine:/$ unset age
    zhangsan@huanghao-Virtual-Machine:/$ echo $age

    只读变量:不可以撤销,不可以修改

    zhangsan@huanghao-Virtual-Machine:/$ readonly animal=pig
    bash: animal: 只读变量
    zhangsan@huanghao-Virtual-Machine:/$ unset animal
    bash: unset: animal: 无法反设定: 只读 variable

    环境变量的声明:

    zhangsan@huanghao-Virtual-Machine:/$ export AGE

    也可以在声明的时候赋值

    zhangsan@huanghao-Virtual-Machine:/$ export AGE

    环境变量名一般全部大写

    下面介绍几个命令:

    #查看所有环境变量的命令(3个)
    env
    printenv
    export

    新增环境变量路径

    export PATH=/usr/local/apache/bin:$PATH

    命令替换:

    zhangsan@huanghao-Virtual-Machine:/$ echo "Today is `date +%F`"
    Today is 2016-01-25
    zhangsan@huanghao-Virtual-Machine:/$ echo `date +%F-%H:%M:%S`
    2016-01-25-16:47:22

    生成序列

    zhangsan@huanghao-Virtual-Machine:/$ seq 3
    1
    2
    3
    zhangsan@huanghao-Virtual-Machine:/$ seq 3 6
    3
    4
    5
    6
    zhangsan@huanghao-Virtual-Machine:/$ seq 1 3 10
    1
    4
    7
    10

    export 生成的环境变量会在shell重启或重启系统后丢失,那么我们则可以通过配置文件来保存环境变量

    #全局文件
    /etc/profile,   /etc/profile.d/*   , /etc/bashrc
    
    #个人文件
    ~/.bash_profile   ~/.bashrc

    配置文件加载顺序

    #交互式
    /etc/profile     /etc/profile.d/*     /bash_profile    ,     ~/.bashrc   /etc/bashrc
    
    #非交互式
    ~/.bashrc     /etc/bashrc    /etc/profied/*
    
    #如果同一个环境变量存在多个配置文件中,以最后加载的配置文件为准

    配置文件类别

    profile 类:设定环境变量,运行命令或脚本(用户登录之前或bash启动之前)

    bashrc 类:设定本地变量,设定命令别名

    配置文件修改完成之后,需要使用下面命令使其生效,比如:

    souce ~/.bash_profile

    命令别名:

    alias vi=vim
    alias cdnet='cd /etc/sysconfig/network-scripts/'
    unalias vi    #撤消别名

    输入重定向:

    command < file

    输出重定向

    command > file

    1 是标准输出  2是错误输出

    command 2>file

    正确和错误统统重定向:

    command > file 2>&1   #都输出到file

    command > file 2 > file2  #输出到不同的文件

    command &>file   合并输出流

    管道:

    command | command2       #把第一个命令的输出当作第二个命令的输入

    command | command2 | command3 | … | commandN

    需要注意的是管道只传递正确的执行结果,遇到错误就终止了

    zhangsan@huanghao-Virtual-Machine:/$ echo "abc" | tr "a-z" "A-Z"
    ABC
    zhangsan@huanghao-Virtual-Machine:/$ echo 'AbCd' | tr 'ABCD' 'abcd'
    abcd

    记录一个命令

    cut –d’ ’ –f2 将字符串以空格切割,输出第二个

    cut –d: –f2   以:切割

    uniq  移出重复的行

    有时会遇到这种情况:

    zhangsan@huanghao-Virtual-Machine:/$ ls /var/log |file
    Usage: file [-bchikLlNnprsvz0] [--apple] [--mime-encoding] [--mime-type]
                [-e testname] [-F separator] [-f namefile] [-m magicfiles] file ...
           file -C [-m magicfiles]
           file [--help]

    因为file 后面必须要跟上一个文件,没有就不行, 这种情况下我们可以用-代替

    zhangsan@huanghao-Virtual-Machine:/$ ls /var/log |file -
    /dev/stdin: ASCII text

    file  是查看文件类型

    再记录一个命令tee

    command | tee /tmp/tee.out |command2    #将command的结果保存到tee.out然后再传递给command2
  • 相关阅读:
    Redis必须注意的慢查询问题
    使用kuernetes提供高可用的logstash服务
    使用kuernetes提供高可用的kibana服务
    Docker指定multiple Insecure registry的方法
    ELK系统中kibana展示数据的时区问题
    ElasticSearch快照备份及恢复
    离线安装redis集群
    Elasticsearch静态集群配置
    LCM的个数 (LCM Cardinality,UVa 10892)
    幂和阶乘 (Again Prime?No time.,UVa 10780)
  • 原文地址:https://www.cnblogs.com/huangxm/p/5158073.html
Copyright © 2011-2022 走看看