Linux学习之Shell基础

一、Shell概述

1.Shell概述:

Shell:壳,Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。类似于翻译,相当windows的操作界面

Shell同时还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux命令。

2.Shell的分类:

Bourne Shell:从1979起Unix就开始使用的Bourne Shell

Bourne Shell的主文件名为sh

C Shell:C Shell主要是在BSD版的unix系统中使用,其语法和c语言类似而得名

Shell主要有两种语法:Bourne和C,这两种语法彼此不兼容。

Bourne家族主要包括:sh、ksh、Bash(标准Shell)、psh、zsh;

C家族主要包括:csh、tcsh;主要用于Unix

Bash:Bash与sh兼容,现在使用的Linux就是使用bash作为用户的基本Shell。

3.Linux支持的Shell

保存在/etc/shells目录下

[[email protected] ~]# vi /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/bin/tcsh

/bin/csh

[[email protected] ~]# sh

sh -4.1# exit

exit

[[email protected] ~]# csh

[[email protected] ~]# exit

exit

[[email protected] ~]#

#那么如何判断我们进入的当前shell类型呢,使用echo $SHELL可以查看当前Shell

[[email protected] ~]# echo $SHELL

/bin/bash

父shell:初始时进入的Shell

子Shell:后面调用的Shell

二、脚本执行方式

1.echo输出命令

echo [选项][输出内容]

选项:

-e :支持反斜线控制的字符转换

控制字符:

\a    :输出警告音

\b    :退格键,也就是向左删除键

\n    :换行符

\r    :回车键

\t    :制表符,也就是Tab键

\v    :垂直制表符

\0nnn :按照八进制ASCll码表输出字符。其中0为数字0,nnn为三位八进制数

\xhh  :按照十六进制ASCll码表输出字符。其中hh是两位十六进制数

[[email protected] ~]# echo "what do you want to do?"

what do you want to do?

[[email protected] ~]# echo -e "what do you want to\b do?"

what do you want t do?

[[email protected] ~]# echo -e "\x68\t\x65\t\x6c\n\x6c\t\x6f\t"

#按照十六进制ASCⅡ码也同样可以输出

h   e   l

l   o

#注意,感叹号在echo命令中是有特殊含义的

[[email protected] ~]# echo -e "\e[1;31m Do you want do \e[0m"

#输出颜色:

#30m=黑色,31m=红色,32m=绿色,33m=***

#34m=蓝色,35m=洋红,36m=青色,37m=白色

#\e[1;:开启颜色

#\e[0m:关闭颜色

2.第一个脚本

#!/bin/bash

#The first Shell program

echo -e "\e[1;34m 天上掉下个林妹妹 \e[0m"

wq

[[email protected] ~]# vi hello.sh

#!/bin/bash标称下面所写的脚本是标准,纯Shell是不会出错,但是调用其他程序时会出错

#学会写注释

3.脚本执行

(1).赋予执行权限,直接运行

chmod 755 hello.sh

./hello.sh  相对路径

(2).通过Bash调用执行脚本

bash hello.sh  #用bash直接解释命令

如果脚本语法有错误可以通过:

[[email protected] ~]# vim hello.sh进行返回修改

注意用英文书写符号

[[email protected] ~]# bash hello.sh

直接调用,或者:

[[email protected] ~]# chmod 755 hello.sh

[[email protected] ~]# ll

总用量 48

-rwxr-xr-x. 1 root root 91  7月 28  11:25  hello.sh

权限变成可执行了

[[email protected] ~]# ./hello.sh

天上掉下个林妹妹

[[email protected] ~]# /root/hello.sh

天上掉下个林妹妹

三、Bash的基本功能

1.命令别名与快捷键

命令别名==小名,另外一个称呼

a.有些命令特别长,那么我们可以取个别名,方便操作

b.操作系统升级后,命令格式发生了变化,那我们可以用旧的得命令去映射新的命令

(1).alias

#查看系统中所有的命令别名

[[email protected] ~]# alias

alias cp = ‘cp -i‘

alias l.= ‘ls -d .* --color=auto‘

...

(2).alias 别名= ‘原命令’

#设定命令别名

[[email protected] ~]# vi /etc/passwd #不支持颜色

[[email protected] ~]# vim /etc/passwd #支持颜色

我们可以:

[[email protected] ~]# alias vi=‘vim‘

(3).别名永久生效与删除别名

vi ~/.bashrc

#写入环境变量配置文件(定义操作环境的配置文件)

进入到root下的.bashrc即兴配置即可

alias rm =‘rm -i‘其中-i就使用询问是否删除的

(4).unalias 别名

#删除别名

(5).命令生效顺序

第一顺序:执行用绝对路径或相对路径执行的命令

第二顺序:执行别名

第三顺序:执行Bash的内部命令,Linux自带的

第四顺序:执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

[[email protected] ~]# echo $PATH

(6).常用快捷键

Ctrl+c 强制终止当前命令

Ctrl+l 清屏

Ctrl+a 光标移动到命令行首

Ctrl+e 光标移动到命令行行尾

Ctrl+u 从光标所在位置删除到行首

Ctrl+z 把命令放到后台

Ctrl+r 在历时命令中搜索

[[email protected] ~]# ^c

2.历史命令

(1).历史命令

history [选项][历史命令保存文件]

选项:

- c:清空历史命令

- w:把缓存中的历史命令写入历史命令保存文件 ~/,bash_history

保存文本其实占用很小

[[email protected] ~]# ls -alh

总用量 104K

-rw-------. 1 root root 7.2K 10月 10  02:27 .bash history

可以保存起来

另外:历史命令默认会保存1000挑,可以在环境变量配置文件/etc/profile中进行修改

[[email protected] ~]# vi /etc/history

HISTSIZE=1000

可以直接修改

(2).历史命令的调用

使用上、下箭头调用以前的历史命令

使用"!n"重复执行第n条历史命令

使用"!!"重复执行上一条命令

使用"!字符串"重复执行最后一条以该字符串开头的命令

[[email protected] ~]# history#可以查看所有在有效范围出现了的历史命令记录

[[email protected] ~]# service network restart

正在关闭接口eth0:              [确定]

关闭环回接口:                  [确定]

弹出环回接口:                  [确定]

弹出界面 eth0:                 [确定]

这个时候我们再次使用就可以这样输入命令:

[[email protected] ~]# !ser

service network restart

(3).命令与文件补全

在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或者文件时,

按一下"Tab"键会自动补全,如果存在多个相关的命令

我们可以:按两下"Tab"会弹出提示所有的相关命令

其实命令补全依赖$PATH命令,文件补全依赖与操作路径

3.输出重定向

(1).概述:

输出重定向和输入重定向:

把结果写入计算机中叫做输入,把结果显示出来叫做输出

设备      设备文件名       文件描述符         类型

键盘      /dev/stdin         0            标准输入

显示器    /dev/sdtout        1             标准输出

显示器    /dev/sdterr        2             标准错误输出

(2).输出重定向:

类型                    符号                作用

标准输出重定向          命令>文件        以覆盖的方式,把命令的正确输出输出到指定                                  的文件或设备当中

命令>>文件        以追加的方式,把命令的正确输出输出到指定                                     的文件或设备当中

标准错误输出重定向       错误命令2>文件      以覆盖的方式,把命令的错误输出输出到指定                                   的文件或设备当中

错误命令2>>文件     以追加的方式,把命令的错误输出输出到指定                                   的文件或设备当中

正确输出和错误输出       命令>文件 2>&1      以覆盖的方式,把命令的正确和错误输出输出                                   同时保存到指定的文件当中

命令>>文件 2>&1     以追加的方式,把命令的正确和错误输出输出                                   到指定的文件当中

命令&>文件        以覆盖的方式,把正确输出和错误输出都保存                                   在同一个文件当中

命令&>>文件       以追加的方式,把命令的正确和错误输出输出                                   到指定的文件当中

命令>>文件1 2>>文件2   以追加的方式,把命令的正确输出保存到文件                                   1,把错误的输出保存到文件2

通过输出重定向,把输出结果保存起来,可以实现无人值守

[[email protected] ~]# ifconfig > test.log

[[email protected] ~]# cat test.log

#输出结果:...

只要命令有输出,都可以保存到指定位置,注意>大于号会覆盖之前的结果,不想覆盖就使用>>,如果目标文件不存在会自动创建。

如果命令不存在,或者有错误,我们应该用2>或者2>>来保存错误信息,错误信息和正确信息应该用不同的重定向格式,注意>或>>左右两边没有空格

注意:

[[email protected] ~]# ls &>/dev/null

其中/dev/null是一个空,里面的文件会直接删除掉,那么保存的日志将会销毁,找不到了

作用:在写脚本时,不需要过程,只查看结果

(3).输入重定向

[[email protected] ~]# wc [选项][文件名]

选项:

-c 统计字节数 count

-w 统计单词数 word

-l 统计行数 list

[[email protected] ~]# wc

abd

ert

#ctrl+d

2  2   6

单词之间靠空格来分隔

命令<文件    把文件作为命令的输入,统计文件的字节数,单词数

命令<<标识符

[[email protected] ~]# wc << dy(相当于结束标记)

>asd

>

>erty

>dy

4  3 11

...

标识符把标识符之间内容作为命令的输入

4.管道符

(1).多命令顺序执行

多命令执行符      格式           作用

;         命令1; 命令2  多个命令顺序执行,命令之间没有任何逻辑联系

&&         命令1&&命令2   逻辑与(没有数据传递)

当命令1正确执行,则命令2才会执行

当命令1执行不正确,则命令2不会执行

||         命令1||命令2   逻辑或(没有数据传递)

当命令1执行不正确时,命令2才会执行

当命令1正确执行时,命令2不会执行

注意分号是英文的;

[[email protected] ~]# ls && echo yes || echo no

acces.log  ....

yes

[[email protected] ~]#  lsa && echo yes || echo no

-bash: lsa:command not found

no

顺序不能颠倒: && echo yes || echo no

这里的命令1可以有多个命令,如果其中有一个命令执行了,那么命令1就是存在正确,&&会

执行,||命令2不执行

[[email protected] ~]#  ls || echo no && echo yes

yes

[[email protected] ~]# lsa || echo no && echo yes

no

yes

(2)管道符

命令格式:

[[email protected] ~]# 命令1 | 命令2

#命令1的正确输出作为命令2的操作对象

例子:

[[email protected] ~]#  ls -l /etc | more

把etc的文件分屏显示

[[email protected] ~]# netstat -an | grep ESTABLISHEN

tcp   0    52  192.168.0.156:22     192.168.0.155:1459      ESTABLISHEN

#提取网络监听端口情况

[[email protected] ~]# netstat -an |  grep ESTABLISHEN  | wc -l

1 #统计连接结果个数

5.通配符

(1).概述:可以用来匹配其他符号的字符

通配符      作用

?         匹配任意一个字符

*          匹配0个或多个任意字符,也就是可以匹配任意内容

[]         匹配中括号中任意一个字符。例如:[abc]代表一定匹配其中一个字符:a或b

或c

[-]        匹配中括号中任意一个字符,-代表一个范围,例如:[a-z]代表从a-z的一个

小写字母

[^]        逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配的不是一

个数字的字符

注:除了*可以匹配多个字符,其他一次只能匹配一个

例子:

[[email protected] ~]# mkdir dy

[[email protected] ~]# cd /root/dy

[[email protected] dy]# pwd

/root/dy

[[email protected] dy]# touch dzp

[[email protected] dy]# touch dzp2

[[email protected] dy]# touch dzp3

[[email protected] dy]# touch dzp34

[[email protected] dy]# touch dzpcang

[[email protected] dy]# touch dzpbols

[[email protected] dy]# touch dzpa

[[email protected] dy]# ls

dzp  dzp2  dzp3  dzp34  dzpcang  dzpbols

[[email protected] dy]# ls dzp

dzp

[[email protected] dy]# ls dzp*

dzp  dzp2  dzp3  dzp34  dzpcang  dzpbols

[[email protected] dy]# ls dzp?

dzp2  dzp3

[[email protected] dy]# ls dzp[0-9]

dzp2  dzp3

[[email protected] dy]# ls dzp[0-9][0-9]

dzp34

[[email protected] dy]# ls dzp[^0-9]

dzpa

注:通配符主要用来匹配文件名或者文件目录,如果要匹配文件内容,需要用到正则表达式

(3).Bash中其他特殊符号:

符号                             作用

‘‘        单引号,在单引号中所有的特殊符号,如“$”和“`”和“\”都没有特殊含义

""        双引号。在双引号中特殊符号都没有特殊含义,但是“$”和“`”和“\”例外

拥有“调用变量的值”,“引用命令”和“转义符”的特殊含义

``        反引号。反引号括起来的内容是系统命令,在Bash中会先执行它,和$()作用一

样,不过推荐使用$(),反引号容易看错

$()       和反引号作用一样,用来引用系统命令

#         在shell脚本中,#开头的行代表注释

$         用于调用变量的值,如需要调用变量name的值时,需要使用$name的方式得到变

量的值

\         转义符,跟在\之后的特殊符号都将失去意义,变成普通字符,如\$将输出“$

”符号,而不是当作变量引用

[[email protected] dy]# a=123

[[email protected] dy]# echo $a

123

[[email protected] dy]# echo ‘$a‘

$a

[[email protected] dy]# echo "$a"

123

[[email protected] dy]# a=ls

[[email protected] dy]# echo "$a"

ls

[[email protected] dy]# a=`ls`

[[email protected] dy]# echo "$a"

dzp

dzp2

dzp3

dzp34

dzpcang

dzpbols

dzpa

一般不是用``容易和‘‘单引号混淆,我们可以使用$()

时间: 2024-10-20 11:45:48

Linux学习之Shell基础的相关文章

Linux学习笔记——Shell基础(八)

+++++++++++++++++++++++++ +++++Shell基础+++++++++++++++++++++++++++++++ 1. Shell概述 Shell定义: Shell 是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至编写一些程序. Shell还是一个功能相当强大的编程语言,易编写.调试.Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令. Shell分类: Bo

linux 学习10 shell 基础

10.1 Shell概述 1.Shell是什么 ?Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编写一些程序. ?Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强.Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令. 2.Shell的分类 ?Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文

linux学习之shell基础篇

1.shell简介 shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层.当从shell或其他程序向Linux传递命令时,内核会做出相应的反应. 2.shell的工作原理 系统初启后,核心为每个终端用户建立一个进程去执行Shell解释程序.它的执行过程基本上按如下步骤: (1)读取用户由键盘输入的命令行. (2)分析命令,以命令名作为文件名,并将其它参数改造为系统调用execve( )内部处理所要求的形        式. (3)

linux 学习随笔-shell基础知识

1:用户的shell历史命令保存在home/username/.bash_history中 #!!  执行用户的上一条命令 #!pw  执行命令历史中最近一次以pw开头的命令 2:'*'来匹配零或多个字符 '?’匹配一个字符 #ls -d Day* 列出Day开头,后面匹配所有字符的目录 #ls -d Day? 列出Day开头,后面匹配一个字符的目录 3:>> 在文件中追加重定向 > 在文件中重定向 4:| 管道符 #cat /etc/passwd|wc -l cat /etc/pass

linux学习之shell练习

linux学习之shell练习 1.描述shell程序的运行原理(可附带必要的图形说明): 2.总结shell编程中所涉及到的所有知识点(如:变量.语法.命令状态等等等,要带图的哟): 总结文章:http://pizimsn.blog.51cto.com/7002551/1697671 3.总结课程所讲的所有循环语句.条件判断的使用方法及其相关示例:(if (jpg|png is not exist):echo "You say a XX") 总结文章:http://pizimsn.b

Linux学习系列——零基础开始

第一部分 Linux基础命令 1.查看系统信息命令 2.Linux内核版本 Linux学习系列--零基础开始,布布扣,bubuko.com

Linux学习之Shell编程基础

转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.  当编辑好脚本时,如果要执行该脚本,还必须使其可执行.  要使脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 1.2 注释  在进行shell编程时,以#开头的

Linux学习日记—shell脚本基础

在Linux的日常维护中,shell脚本是我们必不可少的日常管理之一:其作用是解决服务器的自动化维护工作,减轻管理员的工作量:如果想提高shell脚本的编写速度,必须要熟练使用vi编辑器的各种快捷键. [什么是shell]    Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的.但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,毕竟它使

linux学习18 shell脚本基础-bash变量和逻辑运行

一.回顾 1.用户管理,权限管理,install,mktemp 2.用户管理: 3.权限管理: mode,ownership mode: user group other r w x 4.命令:install,mktemp 二.bash特性及bash脚本编程初步 1.终端:附着在终端的接口程序 GUI:KDE,GNome,Xfce CLI:/etc/shells 2.bash的特性: a.命令行展开:~,{} b.命令别名:alias,unalias c.命令历史:history d.文件名通配