shell基础

shell介绍

  • shell是一个命令解释器,提供用户和机器之间的交互
  • 支持特定语法,比如循环、判断
  • 每个用户都可以有自己特定的shell
  • CentOS7默认shell为bash(Bourne Agin Shell)
  • 还有zsh、ksh等

命令历史

history命令
root用户使用过的命令存放在/root/.bash_history,最多存放1000条。
history -c 清空内存中的历史命令
0402预习笔记和课堂笔记
由系统变量$HISTSIZE控制,在/etc/profie中配置,修改之后重新连接终端或者输入source /etc/profile 生效
0402预习笔记和课堂笔记
记录命令执行的时间
HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S ",当前连接生效。
写入/etc/profile中,放在HISTSIZE下,重新连接终端或者输入source /etc/profile 生效。
0402预习笔记和课堂笔记
0402预习笔记和课堂笔记
保存所有输入过的命令0402预习笔记和课堂笔记 chattr +a ~/.bash_history 使该文件只能追加内容
!! 上一条命令
0402预习笔记和课堂笔记
!n 运行第n条命令
0402预习笔记和课堂笔记
!echo 最近运行的echo命令
0402预习笔记和课堂笔记

命令补全和别名

tab
如果与输入的部分相同的命只有一个按一下tab会自动补全,如果有多个,按两下tab会列出有哪些命令
CentOS 7中支持参数自动补齐,需安装bash-completion并重启之后生效。
yum -install -y bash-completion 自动补全参数

我们可以通过起别名的方式让长度很长的命令使用起来更方便
alias restartnet=‘systemctl restart network.service’ 给命令起别名
0402预习笔记和课堂笔记
alias 查看哪些命令有别名
0402预习笔记和课堂笔记
unalias restartnet 取消别名
0402预习笔记和课堂笔记
别名存放在用户家目录下的 .bashrc和/etc/profile.d目录下的colorgrep.sh和colorls.sh中

通配符

通配符 * 表示零个或多个字符,前后都可以
0402预习笔记和课堂笔记
通配符? 表示一个任意的字符
0402预习笔记和课堂笔记
[0-9] 括号中列出范围,等同于[0123456789],
[0-1a-b] 等同于[01ab],满足范围中一个
{1,2}括号中列出范围,满足范围中的一个
0402预习笔记和课堂笔记

输入输出重定向

表示前面命令正确的输出输入到后面的文件中,删除之前的内容重写

0402预习笔记和课堂笔记

表示前面命令正确的输出输入到后面的文件中,追加内容
0402预习笔记和课堂笔记
2> 表示前面命令错误的输出输入到后面的文件中,删除之前的内容重写
0402预习笔记和课堂笔记
2>> 表示前面命令错误的输出输入到后面的文件中,追加内容
0402预习笔记和课堂笔记
&> 表示前面命令正确和错误的输出都输入到后面的文件中,删除之前的内容重写
0402预习笔记和课堂笔记
&>> 表示前面命令正确和错误的输出都输入到后面的文件中,追加内容
0402预习笔记和课堂笔记
ls [12].txt aaa.txt >3.txt 2>4.txt 将正确和错误的输出分别写入到不同的文件中
0402预习笔记和课堂笔记
wc -l < 1.txt
0402预习笔记和课堂笔记

管道符、作业控制

| 把前面命令输出的内容传递给后面的命令
cat 1.txt |grep ‘aaa’ 输出1.txt的内容过滤出只含有aaa内容
0402预习笔记和课堂笔记

crrl z 暂停一个正在执行的任务并放到后台
0402预习笔记和课堂笔记
fg 把暂停的任务调回前台
0402预习笔记和课堂笔记
bg 把任务放到后台,且实运行中
0402预习笔记和课堂笔记
fg id 调回指定的任务
jobs 查看后台的任务
0402预习笔记和课堂笔记
sleep 200 & 将命令sleep 200放在后台运行
0402预习笔记和课堂笔记

shell变量

env 查看系统变量
0402预习笔记和课堂笔记
set 查看用户自定义变量和系统变量
0402预习笔记和课堂笔记

自定义变量
变量规则:
字母、数字和下划线,首位不能为数字
变量值有特殊符号时需要用单引号括起来,duo=‘duo duo’
0402预习笔记和课堂笔记
a=a’$ b’用’ ‘时,$b会被认为是字符,如果不使用’ ‘,会被认为是变量
单引号将其中的内容都作为了字符串来,忽略所有的命令和特殊字符,类似于一个字符串的用法
0402预习笔记和课堂笔记
双引号与单引号的区别在于其可以包含特殊字符,包括’, ", $, ,如果要忽略特殊字符,就可以利用\来转义,忽略特殊字符,作为普通字符输

出变量的累加
0402预习笔记和课堂笔记

pstree 查看当前登录
yum install -y psmisc 安装pstree命令
0402预习笔记和课堂笔记

当打开多个变量,使用echo $SSH_TTY,可以查看所在终端
0402预习笔记和课堂笔记
全局变量export tx=‘tang xiang’,针对当前连接的终端向下生效,在其他登陆的终端不生效。父shell会同步到子shell,子shell不同步到父shell。
unset 变量名 取消变量
0402预习笔记和课堂笔记

环境变量配置文件

环境变量配置文件分为:系统层次和用户层次
系统层次配置文件
/etc/profile 用户环境变量,用户登陆时加载profile
/etc/bashrc 用户不用登陆,执行shell脚本时调用当中的配置
用户层次配置文件
~/.bashrc
~/.bash_profile
~/.bash_history 记录历史命令
~/.bash_logout 定义用户退出时需要做的操作

变量PS1
[[email protected] ~]# echo $PS1
[\[email protected]\h \W]$,当改为w时,显示的是绝对路径
0402预习笔记和课堂笔记

课堂笔记

bashrc和bash_profile
http://ask.apelearn.com/question/7719
bash_profile跟用户登陆相关,用户登陆生效
bashrc 执行shell就会生效,不一定需要用户登陆。
.bash_profile是用户家目录下的
/etc/bash_profilr是针对所有用户的

echo显示颜色http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html

需要琢磨的点
使用source不会产生新的bash,会把子脚本里变的变量带回父脚本
exec无法把子脚本里变的变量带回父脚本

cat 2.sh
#!/bin/bash
echo “children script PID is $&quot;echo&quot;nowtochildrenscript.&quot;exporta=2echo&quot;inchildren,a=&quot; echo &quot;now to children script.&quot; export a=2 echo &quot;in children, a=a”

cat source.sh
#!/bin/bash
echo “fater script PID is $$”
echo “fater script, set a is 1”
export a=1
echo “it will source ./2.sh”
source ./2.sh
echo “now to father script.”
echo “fater script, a is $a”

cat exec.sh
#!/bin/bash
echo “fater script PID is $$”
echo “fater script, set a is 1”
export a=1
echo “it will exec ./2.sh”
exec ./2.sh
echo “fater script, a is $a”

sort未按ASCII排序
LC_ALL=C

搜索某个命令的安装包
yum provides “/*/*bin/vim”

相关文章: