一,别名指令
对于一些常用的指令,但是又很长的,一下输入不进去,可以给该指令指定别名,通过别名去访问这个指令,如下所示:
alias 别名=指令序列,比如:
alias ll='ls -lia' 用ll指令指代ls -lia , 该指令列出当前目录下面的文件列表,包括文件的索引节点号,文件的大小,文件的访问权限等信息
但是这样设置该别名仅仅是针对当前终端登陆的,再换一个终端就又没有了,Linux给我们提供了永久存储别名的机制。
可以支持对指定用户永久保存以及对整个操作系统永久保存两种量级:
对于当前用户永久保存:
linux环境在~/.bashrc下面添加 alias ll='ls -lia',然后source ~/.bashrc让该配置生效。就对当前用户永久保存,即使用户重新登陆也还是可以使用ll指令
mac环境下在~/.bash_profile下面添加alias ll='ls -lia',然后source~/.bash_profile让配置生效
可以通过alias查看当前系统设置的所有指令别名
对于整个系统这里不单独列出,一般我们都是按照用户维度登陆的
还有一些常用的远程登录指令:alias login='ssh username@ip/host',再输入密码即可
二,输出指令
echo是终端输出指令,默认输出到控制台
printf也是终端输出指令,默认输出到控制台;其实printf就是C语言里面的printf函数,最终调用write系统调用将数据写到显存展示出来;printf支持格式化字符串输出:
printf "%-5s %-5s %-5d %-5.2f\n" ba pa 5
每个%对应后面的一个字符,-表示左对齐,5表示最少占用5个字符,不足5个字符的用空格代替;超过5个字符的就按照一般的方式显示出来;
s表示以字符串的格式输出
d表示以数字的格式输出
f表示以浮点数的格式输出;在浮点数格式中,5表示浮点数最长展示5位,.2表示保留小数点后两位
echo指令支持输出转义字符,不过要用-e才能输出转义字符,如下所示:
echo -e "1\t2\t3"
echo指令默认会在行尾添加一个换行符,想要不输出换行符,可以用-n去掉换行符
echo -en "1\t2\t3"
三,tr指令
tr指令的英文翻译是translate,翻译指令;可以实现字符替换、字符删除、字符压缩的功能
tr指令的一般格式是:tr [options] 'set1' 'set2';
3.1,tr替换指令
如果options啥都不写的话,就是默认的替换指令,将输入文本行中set1集合替换为set2集合,set集合可以是任何正确的正则表达式方式,比如:
echo "wang yu zhong ni hao ma"|tr 'a-z' 'A-Z';这行指令要表示的意思是将输出行中所有小写字母统统转换为大写字母,转换后的输出便是:WANG YU ZHONG NI HAO MA; 其中set1集合要和set2集合一一对应
3.2,tr删除指令
-d选项可以实现字符串的删除,格式为:tr -d 'set';示例如下:
echo "wang yu zhong"|tr -d ' ';将输出行中的所有空行删除;输出为 wangyuzhong
echo "wang yu3445 zhong"|tr -d '0-9';将输出行中的所有数字删除;输出为wang yu zhong
3.3,tr压缩指令
-s选项可以实现重复字符的压缩,将多个连续的重复字符压缩成单个字符,示例如下:
echo "wang yu zhong"|tr -s ' ';将多个空格压缩成一个空格;输出为wang yu zhong
补充知识点,如何查看一个进程设置的环境变量,在Linux中有一个proc文件系统,每一个创建的进程都会在该文件系统下面创建一个目录,环境变量信息在/proc/#pid#/environ下面,可以用cat /proc/#pid#/environ查看
但是每个环境变量(key=value格式)之间,都是以null分隔('\0')的,所以我们要把每个环境变量以单行显示出来的话,需要这样子:
cat /proc/#pid#/environ | tr '\0' '\n',就可以以单行的方式显示出进程的每个环境变量
env指令可以显示出与终端相关的所有按行展示的环境变量
四,环境变量
先说一下变量,变量和我们一般C语言中的变量的含义是一样的,可以采用name=value的方式来定义变量。
这里注意了,在shell中定义变量不能包含空格,即用name = value,在shell中这样的表达式表示是否相等的判断。
shell中无论什么变量,类型都是字符串类型。如果字符串中没有含有空格,可以直接用name=value来定义,否则必须使用
name="value"或者name='value'带引号的方式来定义。
在引用变量的时候,必须用$name 或者 ${name}的方式来引用,示例如下所示:
name="wangyuzhong"
echo $name
echo ${name}
printf "%s %s ${name} %s\n" la la la
echo "${name} is a good boy"
现在可以来说环境变量了,环境变量是指在当前进程中没有定义的变量,但是可以从父进程中集成过来的变量。有很多环境变量,比如PATH、HOME、PWD、USER、UID、SHELL等,各个环境变量解释如下:
环境变量英文名 | 环境变量含义 |
PATH | 路径环境变量;SHELL进程在执行SHELL命令的时候自动从PATH所指向的目录列表中找可执行文件 |
HOME | 当前登录用户的默认工作目录;等价于~ |
PWD | 当前登录用户当前所在的工作目录;等价于pwd指令输出到控制台的当前工作目录 |
USER | 当前登陆的用户名;对于以root权限登陆的用户就是root |
UID | 当前登陆的用户ID;对于以root权限登陆的用户为0 |
SHELL | 当前系统使用的SHELL版本;一般都是/bin/bash |
直接使用${name}就可以引用这些环境变量
环境变量可以被导入使用,格式如下: export name
先解释一下PATH环境变量吧,该环境变量标志了当我们在执行shell脚本的时候,shell进程默认会从PATH环境变量指定的目录列表中找可执行文件,目录列表之间以:分割,比如我们通过如下指令可以打印出来当前进程的环境变量:
echo $PATH
如果想以分行为单位来查看,可以这样echo $PATH|tr ':' '\n'
可以将该指令起一个别名放到~/.bashrc中,alias path="echo $PATH|tr ':' '\n'"
环境变量本质上就是一堆字符串,可以采用字符串拼接的方法将多个环境变量拼接起来,比如:
PATH="$PATH:/home/user/bin"
export PATH
这样在环境变量中就增加了/home/user/bin,而我们平时安装各种软件配置的各种环境变量,就是通过这种方式来的。
比如我在/Users/wangyuzhong/dailyProject/mybin二进制目录下面放置一个二进制可执行文件名为myapp,如果我在/Users/wangyuzhong/dailyProject/mybin目录下面的话,我可以直接输入myapp就可以运行该二进制可执行文件,因为shell进程默认会在当前目录下面找可执行文件;如果我跑到其他路径下面去运行myapp就不行了,因为当前目录以及PATH中都没有指向该可执行文件,我们可以将/Users/wangyuzhong/dailyProject/mybin配置到PATH中,这样不管在哪个目录下面就都可以找到该可执行文件了:
在~/.bashrc下面加上如下一行:
export PATH=$PATH:/Users/wangyuzhong/dailyProject/mybin
那么shell脚本在运行的时候就可以到该目录下面去找二进制可执行文件了