linux shell基础(一)

版权声明:版权所有,转载请注明出处。email:[email protected] https://blog.csdn.net/qq_42334372/article/details/83003664

10月11日任务
8.1 shell介绍
8.2 命令历史
8.3 命令补全和别名
8.4 通配符
8.5 输入输出重定向

linux shell基础(一)

shell介绍

shell是一个命令解释器,提供用户和机器之间的交互。其关系图大概是:
shell与linux关系

shell有程序语言的特性,支持特定语法,比如逻辑判断、循环、数组等。shell脚本高手可以用shell做许多事情,甚至网络爬虫等也不在话下。每个用户都可以有自己的shell配置,就在用户家目录下。

CentOS7默认shell为bash(Bourne Agin Shell),是又sh发展来的。centos还集成了zsh、ksh,这两个shell与bash功能类似。

命令历史

history命令可以查看使用过的命令,默认保存1000条。有时终端显示超过1000条命令,这是因为命令历史暂时保存在内存中,还没有写入配置文件。正常退出终端是才会保存到配置文件~/.bash_history。没有正常退出不会保存(比如断电、直接关掉终端等)。

history -c清空内存中储存的命令。但是不会影响~/.bash_history文件中保存的历史命令。

如果想改变命令历史保存数量,可以设置环境变量HISTSIZE。HISTSIZE=2000只设置当前shell的记录值,如果要永久设置要在/etc/profile中修改。此外HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "可以增加命令使用的时间记录。与HISTSIZE相同,要在/etc/profile在修改。

为了保护隐私不记录历史命令,则可以删除~/bash_history,然后新建一个软链接到/dev/null。如果想永久保存所有历史命令,可以chattr +a ~/.bash_history,即给~/.bash_history增加特殊权限a。

此外,叹号也常在shell中使用。!!执行最近一条命令,!n执行历史命令中第n条(n为数字),!word执行历史命令中最近一条word开头的命令。

命令不全和别名

shell中使用好tab键可以大大减少敲击键盘的次数。敲一下可以不全文件名、文件路径,敲两下列出所有符合条件的文件、路径。centos7新增了参数补全的特性,安装bash-completion后重启linux就可使用。

alias别名给命令重新起个名字,在shell中输入alias后可以显示当前所有别名的命令。如果想取消命令别名unalias xxx,xxx为命令别名。各用户都有自己配置别名的文件,在/.bashrc修改当前用户的配置。/etc/profile.d/中有一些脚本中也有系统自带的一些命令别名,知道即可,不需要修改。自定义的alias放到/.bashrc或者/etc/profile。

通配符

在编写脚本匹配文本时,主要依赖通配符和正则表达式。通配符相对简单:
ls *.txt 列出以.txt结尾的文件。星号代表任意个字符
ls ?.txt 列出以.txt结尾,且.txt前只有一个字符的文件
ls [0-9].txt 列出以.txt结尾,且.txt前为0-9任一字符的文件
ls {1,2}.txt 列出以.txt结尾,且.txt前为1和2的文件。花括号内表示并列,如果当前目录没有2.txt则会报错。

输入输出重定向

shell脚本大量用到标准输入、标准输出、标准错误,英文是stdin、stdout、stderr,用数字0、1、2分表代表。我们输入ls命令,shell在屏幕上显示当前目录的文件,这就是标准输入、标准输出。输出重定向就是把原本要输出到屏幕的内容定向到指定文件:

cat 1.txt >2.txt将1.txt文件的内容输出重定向到2.txt。两个大于号是重定向追加:cat 1.txt >> 2.txt,将1.txt内容追加到2.txt。

如果命令输入错误,shell返回标准错误(stderr)。结合重定向符号:ls aaa.txt 2>err.txt,将ls命令的标准错误重定向到err.txt中(如果成功执行则err.txt不会被写入)。类似的ls aaa.txt 2>>err.txt,这条命令将错误追加到err.txt文件中。

command >1.txt 2>&1这个形式在脚本中经常使用,把标准输出和标准错误都重定向到1.txt中。标准输出“1”可以省略,2>&1表示标准错误重定向到标准输出。这个还可以简化为:command &>1.txt

重定向也可以反向。wc -l < 1.txt就是将1.txt重定向给wc命令。

猜你喜欢

转载自blog.csdn.net/qq_42334372/article/details/83003664