Linux作为当前最最常用的服务器操作系统,其重要性自然不言而喻。 对于想要学习自动化配置管理的同学来说,了解和掌握Linux的基本知识是非常重要的。这里我们主要来讲讲关于Shell的一些事儿~
Shell默认变量
变量 | 描述 |
---|---|
$n | $1表示第一个参数,$2表示第二个参数 |
$# | 命令行参数个数 |
$0 | 当前程序名称 |
$? | 前一个程序的返回码 |
$* | 以“参数1 参数2” 形式保存参数 |
$@ | 以“参数1”“残数”形式保存参数 |
$$ | 本程序的进程号 |
$! | 上一个命令的pid |
example 01
1 |
|
example 02
1 |
|
变量的显示与设置
用户定义变量必须由字母数字以及下划线组成,且第一个字符不能为数字
1 | name=yunlong |
为避免混淆,常常使用${name}形式
1 |
|
变量的有效范围
环境变量可以被子进程使用,自定义变量则不会存在与子进程当中
- 如果希望设置的变量其他shell都能用 export
- 如果希望设置的变量在登录linux时有效,则设置到.bash_profile文件
通常来说每个shell都是由某个shell(父shell)派生而来的,子shell中定义的变量只在子shell范围内有效
变量的读取,数组与申明
1 |
|
export设置环境变量
1 | NAME=yunlong |
数据流从定向
- 什么是数据流从定向
命令 | 说明 |
---|---|
> | 以覆盖方式将标准输出(stdout)输出到指定的文件 |
>> | 以追加的方式将标准输出(stdout)输出到指定的文件 |
2> | 以覆盖的方式将标准错误输出(stderr)输出到指定文件 |
2>> | 以追加方式将标准错误输出(stderr)输出到指定文件 |
- 命令执行的判断依据 ;,&&, ||
1 | cmd1;cmd2 |
cmd1执行完成后顺序执行cmd2的指令
1 | cmd1 |
如果cmd1执行完成且正确执行($?=0) 则接着执行cmd2; 如果cmd1执行完成且发生了错误($?!=0),则不执行cmd2
1 | cmd2 || cmd2 |
如果cmd1执行完成且正确执行,则不执行cmd2; 如果cmd1执行完成且发生了错误,则执行cmd2
管道与命令替换
管道命令
linux中管道命令操作符是:”|”,它是指前一个命令的输出作为后一个命令的输入,也就是standard output 的信息,对于stdandard
error 信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入 standard input.
1 | * 管道命令只处理前一个命令正确输出,不处理错误输出; |
单个管道:
1 | ps -ef|grep java |
多个管道:
1 | ps -ef | grep Google | wc -l |
查询最常使用的10个命令
1 | cat .bash_history | awk '{print $1}' | sort | uniq -c | sort -nr | head -10 |
命令替换
在Linux命令行模式下,当遇到一对“” (上分割符)时,将首先执行“
”中间包含的命令,然后将其输出结果作为参数代入命令行中.
1 | touch `date +%Y%m%d%k%M%S`.txt |
该命令将会优先执行”`”之间的命令,它将按照指定格式输出当前时间,并作为参数传递个touch命令。即可创建一个包含当前时间的文本文件
命令别名设置
设置别名
1 | alias |
取消别名
1 | unalias |
历史命令
显示历史命令
1 | history |
执行历史命令
- !66 执行第66条命令
- !! 执行上一条命令
- !al 罪行最近以al开头的命令
查询历史命令
1 | ctrl + r |