Linux中的变量及IO管道使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中的变量及IO管道使用相关的知识,希望对你有一定的参考价值。
- 变量
- io重定向
- 管道pipe
-
var-变量
数学的方程式:设x=2,求y=x^2+2x+1 ?,x和y我们称为未知数,在shell脚本中称为变量,变量用来存储数据,指向内存空间的某个地址,当脚本中重复执行一长串相同代码时,可以使用变量替换,简化代码量,方便开发。- 变量赋值
var_name=value - 变量名命名规则:
1.变量名只能包含数字、字母和下划线,而且不能以数字开头;
2.变量名最好见名知义,命名机制遵循某种法则;不能够使用程序的保留字,例如if, else, for, while等等,不同版本稍有区别;
- bash shell系统中的变量无需声明可以直接调用
- 变量引用:$var_name /${var_name}
-
变量类型:
本地变量:作用域仅为当前shell进程; 环境变量:作用域为当前shell进程及其子进程; 局部变量:作用域仅为某代码片断(函数上下文); 位置参数变量:当执行脚本的shell进程传递的参数; 特殊变量:shell内置的有特殊功用的变量; $?:判断上一条命令的执行结果 0:表示成功,1~255:表示失败
-
引号的特殊含义:
单引号‘‘:强引用,所有字符原样输出,不转义 双引号"":弱引用;输出引号内所有内容;若内容中有变量、特殊字符转义等会解析结果,然后在输出 反引号``:用于引用命令结果如同$(..)
-
本地变量:仅在一个shell中有效,子进程不生效
用法:var_name=value
查看变量:set | grep var_name
撤销变量:unset var_name - 环境变量:在当前shell的所有子shell中生效
用法:- export name=value
- name=value
export name - declare -x name=value
- name=value
declare -x name
-
只读变量:只读变量无法重新赋值,并且不支持撤销;存活时间为当前shell进程的生命周期,随shell进程终止而终止;
用法:
declare -r var_name=value
readonly var_name=value -
查看环境变量命令:export, declare -x, printenv, env,set
- 但当再重新打开一个终端是,环境变量无效只在当前shell生效,需要定义在全局环境变量配置文件中才会生效。在登录系统时并启动一个shell,一般会加载配置文件中的环境变量。加载的文件跟登录的方式相关。
bash配置文件分为两类:
-profile:为交互式登录shell进程提供配置
全局:对所有用户都生效;
/etc/profile
/etc/profile.d/*.sh
用户个人:仅对当前用户有效;
~/.bash_profile
用途:
1、用于定义环境变量;
2、运行命令或脚本;
-bashrc:为非交互式登录shell进程提供配置
全局:
/etc/bashrc
用户个人:
~/.bashrc
用途:
1、定义本地变量;
2、定义命令别名;
登录与非登录shells:
登录shells:
1.任何通过用户登录的shell包括图形界面登录
2.su -
非登录shells:
1.su
2.图形界面下的终端
3.脚本
4.其他bash实例 - 下面通过在xuetong用户中的四个配置文件中添加echo "/path-dir"来验证加载的文件:/etc/profile,/etc/bashrc,~/.bahs_profile,~/.bashrc;
- 配置文件的读取顺序:
所以如果希望在登录shell和非登录shell都能读到的文件应将变量设置在:~/.bashrc,/etc/bashrc - 如何让配置文件中变量生效
- 通过命令行重复定义一次;
- 让shell进程重读配置文件;
source /path/conf_file
. /path/conf_file
- 变量赋值
- IO重定向
IO:input output,程序的数据流有三种:
输入数据流:默认标准输入为键盘 stdin
输出数据流:默认标准输出为显示器 stdout
错误输出流:错误输出也是通过显示器 stderr
分别使用文件描述:0、1、2
当我们不希望数据通过标准输入输出时,通过io重定向方法修改:
输出重定向: >
特点:会覆盖原有的内容
输出追加重定向:>>
特点:在原有的内容后面追加输出
错误输出流重定向:2> 、2>>
合并输出流(标准输出、错误输出):
1.&>,&>>
2.COMMAND > /path/to/somefile 2>&1
COMMAND >> /path/to/somefile 2>&1
输入重定向:<
多行文本输入:<<
cat << eof
cat > /path/to/somefile << eof
有时候执行命令只关心命令有没有执行成功而不关心输出结果,需要用到特殊设备:/dev/null
- 管道pipe
用于连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流
语法:
COMMAND1 | COMMAND2 | COMMAND3 | ...
例如:# tail -n 6 /etc/passwd | tr ‘a-z‘ ‘A-Z‘
tr命令:把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符,或者输出字符
用法1:
tr SET1 SET2 < /PATH/FROM/SOMEFILE
用法2:
tr -d SET1 < /PATH/FROM/SOMEFILE
比如取出网卡的IP地址:
以上是关于Linux中的变量及IO管道使用的主要内容,如果未能解决你的问题,请参考以下文章