0402Linux shell基础知识(一)

 

8.1 shell介绍
8.2 命令历史
8.3 命令补全和别名
8.4 通配符
8.5 输入输出重定向
8.6 管道符和做业控制
8.7/8.8 shell变量
8.9 环境变量配置文件
扩展
bashrc和bash_profile的区别   http://ask.apelearn.com/question/7719html

shell脚本中echo显示内容带颜色 http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.htmllinux

exec的场景用来记录日志shell

source 脚本  -> 就是执行这个脚本.vim

 

cat 2.sh 
#!/bin/bash
echo "children script PID is $$"
echo "now to children script."
export a=2
echo "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"centos

 

 

yum provides "/*/*bin/vim"bash

 

1、 shell介绍ide

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

2、命令历史spa

咱们使用过的命令,就是命令历史,会存放在用户家目录下 /root/.bash_history,能够经过history,查看使用过的命令历史, 这个命令历史数量限制为1000条.net

 echo $HISTSIZE    系统内置的环境变量为1000,最大保存1000条

history -c       能够将当前内存中的命令历史清空,可是不会清空/root/.bash_history里面的命令

敲过的命令会在用户正常退出终端时,保存到.bash_history文件中

vi /etc/profile     环境变量HISTSIZE    在/etc/profile 定义,找到HISTSIZE    并修改,执行source /etc/profile命令立刻生效

HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"   定义环境变量,使history显示时间日期

 echo $HISTTIMEFORMAT 查看格式

该格式只适用于当前终端,若想环境变量生效,须要把HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S",在配置文件中vi/etc/profile添加 ,保存退出,而后执行source /etc/profile

想命令历史永久保存并不被别人删除,运行chattr +a ~/.bash_history (只能追加,不能删除)
!! 表示执行最后一条命令

!n 表示运行第几条命令(n表明数字)

 !echo表示会在历史命令中,从下向上找最近一次的以echo开头的命令执行

3、命令补全和别名

按一次tab能够补全一个命令、一个路径或者是一个文件名,连续按两次tab键,则把全部的命令或者文件名都列出来。在 centos7里支持参数自动补全,须要安装安装包bash-completion;而后重启系统(reboot)生效

yum install -y bash-completion

 alias restartnet='systemctl restart network.service'  给systemctl restart network.service起个别名叫restartnet

能够经过alias把一个经常使用且很长的命令取一个别名,若是不想用了,也可使用unalias取消别名,直 接执行alias命令,则会看到系统中全部的别名

alias存放:
第一个在用户家目录下.vi .bashrc 文件下


第二个在/etc/profile.d目录下的colorgrep.sh、colorls.sh这些脚本中定义的 

使用unalias能够取消自定义别名,命令格式:unalias 别名

4、通配符

通配符 *,表示0个或多个字符

通配符?,表示任意一个字符

中括号[], [0-9a-zA-Z].txt表示0-9a-zA-Z范围内的任意.txt文件

花括号{},  ls {1,2,3,a}.txt表示括号内任意.txt文件

5、输入输出重定向

> 输出

< 输入

cat 1.txt > 2.txt,大于号 > 表示将前面的命令输出,直接输入到后面的文件里面去,这里是指将1.txt的内容重定向到2.txt 里面去,以前2.txt的内容会被删除

cat 2.txt >> 3.txt,两个大于号>>表示追加,不会删除3.txt的内容,将2.txt的内容追加到3.txt里面去。

lsad 2>a.txt       错误输出, 2大于号表示将命令产生的错误信息输入到一个文件里去

lsaaa 2>> a.txt  表示把错误信息追加剧定向到a.txt

ls [12].txt adads.txt &>a.txt    &> 把正确的和错误的信息输入到a.txt中

 ls wee.txt [12].txt &>>a.txt    &>>把正确的和错误的信息追加到a.txt中

ls [12].txt tyr.txt > 2.txt 2>a.txt   表示将正确的信息输入到2.txt  错误的输入到a.txt

wc -l < 1.txt,表示把1.txt文件内容输入重定向到命令wc -l中去,(左边必须是命令,不能由文件到文件,不多用,了解便可)

6、管道符和做业控制

管道符|,把前面的命令输出的结果交给后面的命令     

cat 1.txt |wc -l

cat 1.txt |grep 'd'

命令wc -l :统计文件数量

命令grep: 用来过滤指定关键词的命令,只要文件中含有关键词,就会把这一行过滤出来

做业控制:

ctrl + z   临时暂停一个正在执行的任务

可使用fg (foreground)命令恢复

若是暂停了多个任务,用jobs查看在后台运行的任务

若是想从新调回,须要输入fg [id],也可使用bg (background)命令放到后台运行去,用法bg [id]
 bg[id] = background把任务调到后台运行
fg[id] =foreground把任务调至前台运行

sleep  1000  sleep命令  让机器休眠1000秒

sleep 100 &   后面加& 直接把任务放到后台运行

 ps aux | grep sleep  查看sleep进程

7、shell变量

env命令能够查看经常使用的环境变量

set 命令不只能够查看系统内置的环境变量,还能够查看用户自定义的变量

自定义变量

a=111   

变量名规则

变量名能够是字母、数字、下划线,开头不能是数字

变量的值有特殊符号时要用单引号括起来

变量的累加

用双引号括起来

全局变量

使用echo $SSH_TTY查看当前所在终端

在终端1中定义一个变量,终端2是看不到的

bash是shell的一个子bash,经过pstree查看,若是没有命令使用 : yum install -y psmisc 安装

在第二个bash下,第一个bash设置的环境变量在第二个bash不生效

全局变量在子shell中生效,运行bash打开子shell

设置全局变量,使用  export a=linux  可让变量在子shell中也生效

取消变量: unset a  

8、环境变量配置文件

环境变量配置文件可分为:系统层次配置文件和用户层次配置文件
系统层次配置文件,全局生效(/etc下的文件):
一、/etc/profile用户环境变量,交互,登陆才执行
二、/etc/bashrc用户不用登陆,执行shell就生效
用户层次配置文件(用户家目录下的文件):
一、~/.bashrc
二、~/.bash_profile
—般咱们不要编辑系统层次的配置文件,在有须要时,能够编辑用户层次的配置文件.bash_profile
source .bash_profile和 . .bash_profile做用同样,加载配置文件里的配置
 ~/.bash_history,用来记录命令历史 
 ~/.bash_logout,用来定义用户退出的时候须要作的一些操做

更改完成后使用    source .bash_profile  加载配置文件中的配置

PS1是在/etc/bashrc里面定义的,用于定义命令左边的字符串显示

echo $PS1   

W修改成w,会变成绝对路径,PS1='\u@\h \w\$'  去掉[ ] ,PS1='<\u@\h \w> \$'  [ ]换成< >,修改[ ]方括号普通用户显示$,root用户显示#

带颜色显示PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$'

相关文章
相关标签/搜索