标签:
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\tworld‘ echo -e "hello\nworld"
单引号: 强引用 ,引号里的字符串不论是什么,原封不动
双引号: 弱引用,引号里的变量替换成变量的值
反引号: 就是键盘上~下面的字符,命令替换
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
标签:
原文地址:http://www.cnblogs.com/huangxm/p/5158073.html