Linux中bash shell入门

▲初探shell

Shell分为图形界面shell(如win中的explorer,linux中的kDE和GNOME)和命令行shell。Shell是一个命令解释器,又分为交互式和非交互式。也可分为登陆式shell(需输入用户名和密码)和非登陆式shell

Linux中支持的shell在/etc/shells文件中

Linux使用的默认shell为bash(Bourne Again Shell)

?

type [-at] name????显示name是外部命令还是bash内置命令

????参数-t????????????file表示外部命令,alias表示命令别名,builtin表示bash内置命令

????参数-a????????????在path变量定义的路径中列出所有含name的命令

?

▲shell的变量功能

变量就是以一组文字或符号等,来取代一些设定或一串保留的数据。echo $变量名

在linux预设的情况中,使用大写字母来设定的变量一般为系统预定义变量。例如PATH

在bash中有很多预定义环境变量,系统通过预定义环境变量来定义shell的环境,env可显示目前系统中主要的预定义变量内容,set可以将环境变量和用户自定义变量显示出来

?

PS1提示符的设置

????\d????代表日期

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

????\T????12小时格式显示时间

????\A????24小时格式显示时间(不含秒)

????\H????完整的主机名称

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

????\u????当前帐户名

????\v????bash版本信息

????\w????完整工作目录

????\W????只列出最后一个目录

????\#????执行的第几个指令

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

?

用export可以将用户自定义的变量变成环境变量。在启动shell的时候,系统给shell分配一块内存,用来存储系统环境变量。export可以将用户自定义变量移动到该内存中。当进入子shell时,子shell将父shell的系统环境变量读入到子shell的内存中

?

bash下变量设定的规则

  1. 变量与变量内容以等号=来连接,等号两边不能直接接空格符
  2. 变量名称只能是英文字母与数字,但是数字不能做开头
  3. 有空格符可以使用双引号"或单引号‘来将变量内容结合起来,但要注意,双引号内的特殊字符可以爆出原有变量特性,但是单引号内的特殊字符只是一般字符
  4. 必要时可以使用转义字符\来将特殊符号转变成一般符号
  5. 在一串指令中,如果还需要由其他指令提供的信息,可以使用quote,‘command‘
  6. 若该变量为扩增变量内容时,则需以双引号和$变量名称。例如PATH="$PATH":/home继续累加变量内容
  7. 若该变量需要在其他子程序中使用,可以使用export将变量变成环境变量
  8. 取消变量的方法为????unset 变量名称

?

语系文件的变量locale

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

改变系统支持的语系,可修改/etc/sysconfig/i18n(系统默认的语系文件)

?

变量键盘读取和声明变量????????

read [-pt] 变量

????-p????后面可以接提示符

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

declare/typeset [-airx] 变量

????-a????声明的变量为数组a[i]

????-i????整数数字

????-r????变量为只读

????-x????变量变成系统环境变量

?

▲命令别名与历史命令

设置alias取消unalias

????命令格式????alias 命令别名=‘命令内容‘

????命令格式????unalias 命令别名

history n

history [-crw]

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

????参数-r????????将histfile中的内容读到shell的命令记忆中

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

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

????????!Command????执行以command开头的指令

????????!!????????上一个指令的意思

?

▲bash shell使用环境

登陆信息提示????????/etc/issue????/etc/motd

????\d本地端时间的日期????????\l显示第几个终端接口

????\m显示硬件等级????????\n显示主机的网络名称

????\r操作系统的版本????????\t24小时格式显示时间

????\s操作系统的名称????????\v操作系统的版本

?

bash shell系统设定值在/etc/profile(设定了PATH,USER等几个重要的变量)和/etc/bashrc(规划umask的功能和提示字符PS1的内容)。个人设定值在~/.bash_profile和~/.bashrc。

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

?

个人设定值

????~/.bash_profile里面定义了个人化的路径PATH与环境变量的文件名称

????~/.bashrc里面设定个人化变量。例如命令别名的设定,路径的重新定义

????~/.bash_logout在注销shell时,BASH会为你所做的事情

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

?

终端环境设置????????stty

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

????????intr????????给正在运行的程序发送中断信号(Ctrl+C)

????????quit????????给正在运行的程序发送退出信号(Ctrl+\)

????????erase????????向前删除字符(Delete)

????????kill????????删除命令行上的文字(Ctrl+U)

????????eof????????停止当前的输出(Ctrl+D)

????????start????????重启暂停的输出(Ctrl+Q)

????????stop????????停止当前的输出(Ctrl+S)

????????susp????????给正在运行的程序发送一个终端停止信号(Ctrl+Z)

????????rprnt????????输入命令时提示使用过的历史命令(Ctrl+R)

????????werase????????删除命令行的最后一个字(Ctrl+W)

?

万用字符与特殊符号


符号


内容


*


代表0个或多个字符(或数字)


?


代表一个字母


#


批注,常用在script当中视作说明


\


跳脱符号,将特殊字符或万用字符还原成一般字符


|


分割两个管道命令的界定


;


连续性命令的界定


~


使用者的家目录


$


变量之前需要加的变量取代值


&


将指令变成背景下工作


!


逻辑运算意义上的非的意思


/


路径分割符号


>,>>


输出导向,分别是取代和累加



单引号,不具有变量置换的功能


"


双引号,具有变量置换的功能


``


引用,先执行的命令


()


子shell的起始与结束


[]


字符的组合


{}


命令区块的组合

?

?

数据流重导向????????redirect????就是将目前的所得数据输出到其他地方去

三种输出输入的状况

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

????标准输出stdout????代码为1????使用1>或>>

????错误输出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(得到的信息不全)

?

双向重导向????tee –a file????将数据流同时输出到屏幕和文件

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

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

|| /home | tee /tmp/dirfile

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

?

为何要使用命令输出重导向(5个原因)

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

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

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

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

????错误讯息与正确讯息需要分别输出时

?

命令执行的判断依据????????; && ||

????commond1;commond2????不论命令1执行结果如何,命令2都被执行

????commond1&&commond2????如果命令1正确执行,命令2才执行

????commond1||commond2????如果命令1错误,命令2才执行

?

▲管道命令(pipe)

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

?

选取命令????cut和grep

????就是将一段数据经过分析后,取出我们想要的部分,或者是通过分析关键字取得我们想要的行。选取信息通常是针对逐行分析得到的,而不是针对整个信息分析的。

cut????????将一段消息的某段切出来。消息以行为单位

????参数-d????????‘分割字符‘ –f fields

????参数-c????????以字符为单位取出固定的字符范围

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

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

命令格式????grep [-acinv] ‘搜素字符串‘ filename

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

????参数-c????????计算找到‘搜索字符串‘的次数

????参数-i????????忽略大小写的不同

????参数-n????????顺便输出行号

????参数-v????????反向选择,即显示没有‘搜索字符串‘的那一行

?

排序命令????sort wc uniq

?

sort [-fbMnrtuk] [file or stdin]

????参数-f????????忽略大小写的差异

????参数-b????????忽略最前面的空格字符部分

????参数-M????以月份的名称来排序

????参数-n????????使用纯数字排序(默认使用文字类型来排序)

????参数-r????????反向排序

????参数-t????????分隔符,默认是tab

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

????参数-k????????按那个字段(field)来进行排序

uniq [-ic]

????参数-i????????忽略大小写

????参数-c????????进行计数

wc [-lwm]

????参数-l????????仅显示多少行

????参数-w????????仅显示有多少字

????参数-m????多少字符

?

字符转换命令????????tr col join paste expand

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????????代表file1要用那个字段来分析的意思

????参数-2????????代表file2要用那个字段来分析的意思

paste [] file1 file2

????参数-d????????后面可以接分隔字符,预设是以tab键来分割的

????参数- ????????如果file部分写成-,表示来自standard input的意思

split [-bl] file PREFIX????????文件分割,PREFIX为前缀

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

????参数-l????????以行数来进行分割

?

参数代换xargs

xargs [-epn] command????没接参数时,默认echo输出

????参数-e????????eof的意思。后面可以接字符串,当xargs分析到这个字符串时,就会停止工作

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

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

?

?

?

?

?

时间: 2024-08-23 11:47:39

Linux中bash shell入门的相关文章

linux中 bash shell terminal的解释

shell:是内核的一个外层保护工具,并负责完成用户与内核之间的交互: 提供了用户与内核进行交互操作的一种接口,它接收用户输入的命令并把它送入内核去执行. 是一个命令行解释器,解释由用户输入的命令并把它们送入内核去执行. bash:Linux中shell种类很多,bash就是其中一种. terminal:终端用来启动shell环境  . 原文地址:http://blog.51cto.com/5468775/2090296

&lt;LINUX &gt;bash shell 入门 --linux学习笔记

首先说下我个人对于shell的理解,我觉得shell是一种通过各种控制语句将linux命令进行集合实现批处理的一种脚本语言. shell编程入门其实很简单,语法知识并不多,但是高级shell编程就很难,因为shell是用户和linux之间的桥梁,要编写高质量的shell脚本,就需要用户对linux有很全面的认识. 这里我们只分析shell脚本的语法知识,如想透彻的学习linux还需多努力. shell结构       1.#!指定执行脚本的shell 2.#注释行 3.命令和控制结构 创建she

Linux中执行shell脚本的4种方法

这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下. bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/root/bin目录中并已有执行权限(添加权限的方法:chmod +x hello.sh). 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: ./ 的意思是说在当前的工作目录下执行hello.sh.如果不加上

Linux中执行shell脚本

这篇文章主要介绍了Linux中执行shell脚本的4种方法总结,即在Linux中运行shell脚本的4种方法,需要的朋友可以参考下 bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限.方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:复制代码 代码如下: cd /data/shell./hello.sh ./的意思是说在当前的工作目录下执行hello.s

Linux中使用Shell把报警信息发送至邮件和微信上

Linux中使用Shell把报警信息发送至邮件和微信上 创建企业微信报警 注册一个企业微信号 点击企业微信,进行企业注册. 注册成功后会看到企业信息页面,把企业ID先记录下来,后面发送报警脚本里需要配置. 创建一个部门,专供发送报警用,并添加需要接收报警的成员 点击"通讯录",再点击+号,选择添加部门 把部门ID记录下来,后面配置web端用户报警媒介的收件人要用到. 给刚创建的部门添加成员,可以直接添加成员也可以微信邀请,可以先将管理员微信添加进来. 新增一个第三方应用 点击应用与小程

Linux中的shell

shell的含义: 首先shell的英文含义是"壳": 它是相对于内核来说的,因为它是建议在核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核. Linux中的shell,是指一个面向用户的命令接口,表现形式就是一个可以由用户录入的界面,这个界面也可以反馈运行信息: shell在Linux中的存在形式: 由于Linux不同于Windows,Linux是内核与界面分离的,它可以脱离图形界面而单独运行,同样也可以在内核的基础上运行图形化的桌面. 这样,在Lin

Linux中的shell到底是什么

(引自:https://zhidao.baidu.com/question/557066905.html) [一] shell的含义: 首先shell的英文含义是"壳": 它是相对于内核来说的,因为它是建立在内核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核. Linux中的shell,是指一个面向用户的命令接口,表现形式就是一个可以由用户录入的界面,这个界面也可以反馈运行信息: [二]shell在Linux中的存在形式: 由于Linux不同于Windo

系统管理中 bash shell 脚本常用方法总结

FROM: http://www.cnblogs.com/hunterfu/archive/2010/02/23/1672129.html 在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则. 1. 单引号和双引号的区别 单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符 ,不会作变量的引用,直接输出字符窜.请看如下例子: [[email protec

Linux中Bash发现重大安全漏洞修改方法

北京时间9月25日消息,Linux用户今天又得到了一个“惊喜”!Red Hat安全团队在 Linux 中广泛使用的Bash shell中发现了一个隐晦而危险的安全漏洞.该漏洞被称为“Bash Bug”或“Shellshock”. 当用户正常访问,该漏洞允许攻击者的代码像在Shell中一样执行,这就为各种各样的攻击打开了方便之门.而且,更糟糕的是,该漏洞已经在Linux中存在很长时间了,所以修补某个Linux机器很容易,但是要全部修补,几乎不可能实现. Red Hat和Fedora已经发布了针对该