7、认识bashshell

来源:互联网 发布:linux 拷贝整个文件夹 编辑:程序博客网 时间:2024/06/05 08:12

本文要点:

一、介绍Shell

二、Shell的变量功能

三、命令别名与历史命令

四、Bash Shell使用环境

五、数据流重定向

六、管道命令(pipe)

 

一、介绍Shell

1、图形界面shell:windowsexplorer;kDE、GNOME;

2、命令行shell

3、shell是一个命令解释器

4、shell又分为交互式和非交互式

 

linux支持的shell在/etc/shells文件中:

/bin/sh已经被/bin/bash取代

/bin/bash linux默认的shell

/bin/tcsh整合c shell,提供更多的功能

/bin/csh依附于bsd版的unix的shell,被/bin/tcsh取代

/bin/ksh常用于商业版本中,兼容于bash

/bin/zsh基于ksh开发的,功能更强大

 

linux使用的版本称为Bourne AgainSHell。BASH主要的优点:

命令记忆能力

档案比对补全功能:指令补全,文件名称补全

命令别名(alias)设定功能

作业控制(jobs)、前台后台控制

Shell scripts的强大功能

通配符*?等

 

Bash Shell的内建命令:type

type [-ta] name

1、不加任何参数时,type显示出name是外部命令还是bash内置的命令;

2、-t,加-t参数。type将name通过以下文字显示他的意思:

file:表示外部命令;

alias:表示该命令为命令别名所设置的名称;

builtin:表示该命令为bash内置的命令;

3、-a:在PATH变量定义的路径中,列出所有内含name的命令,包含alias。

 

二、Shell的变量功能

1、shell的变量:

1、变量就是以一组文字或符号等,来取代一些设定或者是一串保留的数据;

2、echo $变量名

  echo $PATH

3、在linux预设的情况中,使用“大写的字母”来设定的变量一般为系统预定义的变量;

4、在bash中有很多预定义环境变量;

5、系统通过预定义环境变量来定义shell的环境;

  env显示目前系统中主要的预定义变量内容

  set可以将环境变量和用户自订变量显示出来

 

PS1提示符的设置:

\d:代表日期,格式为星期 月 日;

\t:24小时格式显示时间,HH:MM:SS;

\A:24小时格式显示时间,HH:MM;

\T:12小时格式显示时间,HH:MM:SS;

\H:完整的主机名称;

\h:只取主机名称的第一个名字;

\u:当前账户名;

\v:bash版本信息;

\w:完整工作目录;

\W:只列出最后一个目录;

\#:执行的第几个指令;

\$:root用户提示符是#,其他用户提示符是$;

 

2、认识bash shell

1、如何将用户自定义的变量变成环境变量呢?export

2、在启动shell的时候,系统给shell分配一块内存,用来存储系统环境变量;

3、export可以将用户自定义变量移动到该内存中;

4、当进入子shell时,子shell将父shell的系统环境变量读入到子shell的内存中;

 

3、bash下的变量设定的规则:

1、变量与变量内容以等号=来连结,等号两边不能直接接空格符;

2、变量名称只能是英文字母与数字,但是数字不能是开头字符;

3、若有空格符可以使用双引号“或者单引号‘来将变量内容结合起来,但是要注意,双引号内的特殊字符可以保持原有变量特性,但是单引号内的特殊字符只是一般的字符;

4、必要时可以使用转义字符\来将特殊符号(如Enter*?<>:&![]|\‘”`(){}等)转变成一般符号;

5、在一串指令中,如果还需要由其它指令提供的信息,可以使用quote [‘command’];

6、若该变量为扩增变量内容时,则需以双引号和$变量名称,比如:PATH=”$PATH”:/home继续累加变量内容;

7、若该变量需要在其他子程序中使用,可以使用export将变量变成环境变量,如exportmyname,只输入export列出系统等所有环境变量;

8、取消变量的方法为:unset 变量名称。

 

语系文件的变量locale

locale –a显示系统支持的所有语系

改变系统支持的语系,可修改/etc/sysconfig/i18n

 

4、变量键盘读取和声明变量

read [-pt] 变量

-p:后面可以接提示符;

-t:后面可以接秒数,限制等待的时间;

 

declare/typeset [-airx] 变量

-a:声明的变量为数组;

-i:整数数字(integer) -r变量为只读;

-x:变量变成系统环境变量;

数组:a[i]

 

三、命令别名与历史命令

设置alias,取消unalias;

history n;

history [-crw];

-c将当前shell中的所有历史命令全部清除;

-r将histfile中的内容读到shell的命令记忆中;

-w将当前历史记忆内容写入到histfile中;

! number:执行第几个指令的意思;

! Command:执行以command开头的指令;

!!:上一个指令的意思;

 

四、Bash shell的使用环境

1、登录信息

登录信息提示:/etc/issue /etc/motd

\d 本地端时间的日期;

\l 显示第几个终端接口;

\m 显示硬件等级;

\n 显示主机的网络名称;

\r 操作系统的版本;

\t 24小时格式显示时间;

\s 操作系统名称;

\v 操作系统的版本;

 

2、系统设定值和个人设定值

bash shell系统设定值在/etc/profile和/etc/bashrc个人设定值在~/.bash_profile  ~/.bashrc:

1、/etc/profile:设定了几个重要的变量,如:PATH、USER、MAIL、LOGNAME、HOSTNAME、HISTSIZE、INPUTRC。同时,这个file也规划出/etc/profule.d(针对bash和cshell规范了一些数据);

2、/etc/profile:这个档案在规划umask的功能,也同时规划出提示符PS1的内容;

3、/etc/man.config规范了使用man的时候,man page的路径到哪里去寻找;

4、~/.bash_profile:里面定义了个人化的路径(PATH)与环境变量的文件名称;

5、~/.bashrc:在这里设定个人化变量!例如命令别名的设定,路径的重新定义,在这里完成的;

6、~/.bash_logout:在注销shell的时候,BASH会为你所做的事情;

7、source变量设定文件就可以将设定档的内容读入一次;

 

3、Bash shell使用环境的终端的环境设置

终端的环境设置:stty

sty –a将当前所有的stty参数列出来

intr:给正在运行的程序发送中断信号;

quit:给正在运行的程序发送退出信号;

erase:向前删除字符;

kill:删除命令行上的文字;

eof:文件结束,输入结束;

start:重启暂停的输出;

stop:停止当前的输出;

susp:给正在运行的程序发送一个终端停止信号;

rprnt:输入命令时提示使用过的历史命令;

werase:删除命令行的最后一个字;

 

修改del向前删除为backspace向前删除?

stty erase^? stty erase ^H

 

4、万用字符和特殊符号

 

5、组合按键

 

五、数据流重导向

1、什么是数据流重导向

重导向redirect:就是将目前的所得数据输出到其它地方去。

 

三种输出输入的情况,分别是:

标准输入stdin:代码为0;使用<或<<;

标准输出stdout:代码为1;使用的方式为1>或2>>;

错误输出stderr:代码为2;使用的方式为2>或2>>;

 

find / -name file 1> list_right 2>list_error

同时写入同一个档案

find / -name file 1> list 2>&1

find / -name file >list 2> list

 

2、双向重导向tee

tee:将数据流同时输出到屏幕和文件;

tee –a file

-a:以累加的方式,将数据加入file中

last | cut –d ‘:’ –f1 | tee lastlist

|| /home | tee /tmp/dirfile

|| /tmp | tee –a /tmp/dirfile

 

3、为何要使用命令输出重导向

1、当屏幕输出的信息很重要,而且我们需要将他存下来;

2、后台执行中的程序,不希望他干扰屏幕正常输出结果时;

3、一些系统例行命令的执行结果,希望他可以存下来时;

4、一些执行命令,我们已经知道他可能的错误讯息,所以想以2> /dev/null将他丢掉时;

5、错误讯息与正确讯息需要分别输出时。

 

4、命令执行的判断依据: ;  && ||

1、command1;command2利用分号“;”来分隔,这个分号的意思,代表不论command1执行结果为何,command2都会被执行;

2、command1&&command2如果command正确才执行command2;

3、command1 || command2如果command1错误才执行command2。

 

六、管道命令(pipe)

1、选取命令cut和grep

切记:管道命令“|”只能处理通过前面一个命令传来的正确信息,也就是标准输出(STDOUT)的信息,对于标准错误,没有处理能力。

 

选取命令(cut和grep):就是将一段数据经过分析后,取出我们想要的部分,或者是,通过分析关键字,取得我们想要的行。选取信息通常是针对“逐行”分析得到的,而不是针对整个信息分析的。

 

cut:就是切的意思,这个命令可以将一段消息的某段“切”出来,消息以行为单位。

cut -d “分隔字符” –f fields

cut –c 字符范围

参数说明:

-d:后面接分隔符,预设是空格符,与-f一起使用;

-c:以字符为单位取出固定的字符范围;

-f:根据-d分隔符将一段消息分为数段,用-f是取出第几段的意思。

 

grep分析一行信息,若其中有需要的信息,就将这一行信息显示出来。

grep [-acinv] ‘搜索字符串’filename

-a:将二进制文件以文本文件的方式搜索数据;

-c:计算找到“搜索字符串”的次数;

-i:忽略大小写的不同,所有大小写视为相同;

-n:顺序输出行号;

-v:反向选择,即显示没有“搜索字符串”的那一行。

 

2、排序命令:sort、wc、uniq

sort [-fbMnrtuk] [file or stdin]

参数说明:

-f:忽略大小写的差异;

-b:忽略最前面的空格字符部分;

-M:以月份的名字来排序;

-n:使用“纯数字”排序(默认使用文字类型来排序);

-r:反向排序;

-t:分隔符,默认是tab;

-u:就是uniq,相同数据,只列出一次显示;

-k:按那个字段(filed)来进行排序。

 

uniq [-ic]

i:忽略大小写;

-c:进行计数。

 

wc [-lwm]

-l:仅显示多少行;

-w:仅显示有多少字;

-m:多少字符。

 

3、字符转换命令tr、col、join、paste、expand

tr可以用来删除一段信息当中的文字,或者是进行文字信息的替换。

tr [-ds] str …

参数:

-d:删除信息当中的str这个字符串;

-s:取代掉重复的字符。

 

col [-x]

参数:

-x:将tab键转换成对等的空格键。

 

expand [-t] file

参数:

将tab键转换成8个空格键;

-t:后接数字n则自定义将tab键转换成n个空格键。

 

join [-ti12] file1 file2

参数:

-t:join预设以空格符分隔数据,并且比对“第一个字段”的数据,如果两个档案相同,则将两笔数据联成一行,且第一个字段放在第一个;

-i:忽略大小写的差异;

-1:这个数字的1,代表“第一个档案要用那个字段来分析”的意思;

-2:代表“第二个档案要用那个字段来分析”的意思。

 

paste [-d] file1 file2

参数:

-d:后面可以接分隔字符。预设是以tab来分隔的;

-:如果file部分写成-,表示来自standardinput的意思。

 

split [-bl] file PREFIX

参数:

-b:后面可接欲分割成的档案大小,可加单位,例如b、k、m等;

-l:以行数来进行分割。

 

4、参数代换xargs

xargs [-epn] command

-e:是eof的意思,后面可以接一个字符串,当xargs分析到这个字符串时,就会停止工作;

-p:在执行每个命令的参数时,都会询问用户的意思;

-n:后面接次数,每次command命令执行时,要使用几个参数;

当xargs后面没有接任何命令时,默认是echo输出。

0 0