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\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
shell(1)的更多相关文章
- Shell替换
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. #!/bin/bash a= echo -e "Value of a is ...
- Shell特殊变量
$ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...
- shell变量
定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...
- 第一个shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...
- shell简介
Shell作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. shell使用的熟练程度反映了用户对U ...
- Shell碎碎念
1. 字符串如何大小写转换 str="This is a Bash Shell script." 1> tr方式 newstr=`tr '[A-Z]' '[a-z]' < ...
- MongoDB学习笔记二—Shell操作
数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...
- 使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...
- Linux环境下shell和vim中乱码原因及消除办法
shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...
- 【说解】在shell中通过mkfifo创建命名管道来控制多个进程并发执行
背景: 工作中有两个异地机房需要传数据,数据全名很规范,在某个目录下命名为统一的前缀加上编号.如/path/from/file.{1..100}.而机房间的专线对单个scp进程的传输速度是有限制的,比 ...
随机推荐
- HDU4869:Turn the pokers(快速幂求逆元+组合数)
题意: 给出n次翻转和m张牌,牌相同且一开始背面向上,输入n个数xi,表示xi张牌翻转,问最后得到的牌的情况的总数. 思路: 首先我们可以假设一开始牌背面状态为0,正面则为1,最后即是求ΣC(m,k) ...
- HDU-4737 A Bit Fun 维护
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4737 题意:给一个数列a0, a1 ... , an-1,令 f(i, j) = ai|ai+1|ai ...
- homework-02 最大子区域和
题目描述 题目建立上一个作业的题目基础上,上一次作业是要求在一个一维序列里找一个最大连续子串,这次task最基础的要求是在一个二维表里找一个最大连续子矩形,但是这次作业有若干个升级版,分别要求可以加入 ...
- [iOS微博项目 - 1.7] - 版本新特性
A.版本新特性 1.需求 第一次使用新版本的时候,不直接进入app,而是展示新特性界面 github: https://github.com/hellovoidworld/HVWWeibo ...
- srcelement、parentElement
srcElement 是Dom事件中的事件最初指派到的元素. 比如有一个div,里面有一个按钮.你响应div的onclick事件,但实际上,你单击的只是它内部的按钮,那么,srcElement指向的, ...
- hdu 4496 (并差集)
题意:给出一个图,m条边,输出删除前i条边后该图的联通块的个数. 思路:刚开始想着是不是联通问题,后来看明白题意后知道,如果从最后一条边添加的话,答案就会出来了,就是并差集的操作. #include& ...
- poj 3693 Maximum repetition substring (后缀数组)
其实是论文题.. 题意:求一个字符串中,能由单位串repeat得到的子串中,单位串重复次数最多的子串.若有多个重复次数相同的,输出字典序最小的那个. 解题思路:其实跟论文差不多,我看了很久没看懂,后来 ...
- 转载“启动\关闭Oracle数据库的多种方法”--来自百度#Oracle
启动\关闭Oracle数据库的多种方法 启动和关闭oracle有很多种方法. 这里只给出3种方法: l Sql*plus l OEM控制台 l Wind ...
- arcgis下载
你懂的~ t.cn/RA4cc3k 密码ygdr 包含10.2全部,含有(亲测)字样表示测试过OK的,SP是从esri网站下载的几乎全部patch和sp,包括desktop.engine和sever: ...
- 哥也能写KMP了——实现strstr()
经过上次去面试,面试官要求实现strstr(),当场就蒙了.这个题目是模式匹配问题,<算法导论>里列出了几种字符串匹配算法: 朴素算法 | Rabin-Karp | 有限自动机算法 | ...