Linux学习笔记(15)shell基础之Bash基本功能

1 shell概述

shell是一个命令解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序。用户可以用shell启动、挂起、停止甚至是编写一些程序。

shell是一个功能强大的编程语言,其特点是易编写、易调试及灵活性强。shell是解释执行的脚本语言,可直接调用Linux系统命令。

shell通常分为两类:B shell和C shell。前者的主文件名为sh,后者主要用于BSD版本的Unix中,其语法格式和C语言类似。这两种shell的语法彼此间不兼容。Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本shell。

Linux支持的shell可查看/etc/shells配置文件:

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

/bin/sh

/bin/bash

/sbin/nologin

/bin/dash

/bin/tcsh

/bin/csh

可通过输入其相应命令进行互相转换,如使用sh:

[[email protected] ~]# sh

sh-4.1#

sh-4.1# exit

exit

[[email protected] ~]#

2 shell脚本的执行方式

1)echo命令用于输出信息,其格式为:

echo [选项] [输出内容]

其中,-e选项支持反斜线控制的字符转换。常见的控制字符如下表:


控制字符


作用


\\


输出\本身


\a


输出警告音


\b


退格键,即向左删除键


\c


取消输出行末的换行符,与"-n"选项一致


\e


ESCAPE键


\f


换页符


\n


换行符


\r


回车键


\t


制表符,即Tab键


\v


垂直制表符


\0nnn


按照八进制ASCII码表输出字符,其中0为数字0,nnn是三位八进制数


\xhh


按照十六进制ASCII码表输出子非鱼,其中hh是两位十六进制数

例:删除左侧字符:

[[email protected] ~]# echo -e "abcd\be"

abce

制表符与换行符:

[[email protected] ~]# echo -e "a\tb\tc\nd\te\tf"

a       b       c

d       e       f

十六进制ASCII码输出:

[[email protected] ~]# echo -e "\x61\t\x62\t\x63\n\x64\t\x65\t\x66"

a       b       c

d       e       f

输出颜色:

[[email protected] ~]# echo -e "\e[1;31m abcd \e[0m"

abcd

其中,"\e[1"表示开启颜色输出,"\e[0m"表示结束颜色输出。

30m=黑色 31m=红色 32m=绿色 33m=黄色

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

2)第一个脚本,其中都一行为shell标志,表示以下写的程序为shell脚本程序,后续的#表示注释

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

#!/bin/bash

#Description:   The first program

#Autor:         ws

#Date:

echo "hello world"

3)脚本执行

①通过Bash调用执行脚本

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

hello world

②赋予执行权限,直接运行(习惯的执行方式)

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

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

hello world

引申:Linux的回车符用"$"表示,可用过cat –A进行查看;windows的回车符在Linux中显示为"^M$",需使用dos2unix命令进行转换。

3 Bash的基本功能

(1)历史命令与命令补全

1)历史命令history,其格式为:

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

其中,-c选项表示清空历史命令(一般不建议),-w表示把缓存中的历史命令写入命令缓存文件~/.bash_history中。

history命令默认保存1000条记录,可以在环境变量配置文件/etc/profile中进行更改,所在位置为:HISTSIZE=1000。

历史命令的调用方式有:

①使用上下箭头调用

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

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

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

2)在Bash中,命令与文件补全可通过"Tab"键来完成。

(2)命令别名与常用快捷键

1)命令别名

设定命令别名的格式为:alias 别名="原命令"

查询命令别名的方式为:alias

使用别名时注意命令的执行顺序:

①第一顺位为用绝对路径或相对路径执行的命令;

②第二顺位为执行别名;

③第三顺位为执行Bash的内部自带命令;

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

可通过$PATH来查看系统的环境变量:

[[email protected] ~]# $PATH

-bash: /usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin: 没有那个文件或目录

注意:命令行定义的别名是临时的,如需永久生效,则在家目录的.bashrc中写入别名即可,如root下的别名文件:

[[email protected] ~]# vim /root/.bashrc

# .bashrc

# User specific aliases and functions

alias rm=‘rm -i‘

alias cp=‘cp -i‘

alias mv=‘mv -i‘

# Source global definitions

if [ -f /etc/bashrc ]; then

. /etc/bashrc

fi

~

删除别名的命令为:unalias 别名。

2)Bash常用快捷键


快捷键


作用


Ctrl+A


将光标移动到命令行开头,如果输入的命令过长,想要把光标移动到命令行开头时使用


Ctrl+E


将光标移动到命令行结尾


Ctrl+C


强制终止当前的命令


Ctrl+L


清屏,相当于clear命令


Ctrl+U


删除或剪切光标之前的命令。输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键更加方便


Ctrl+K


删除或剪切光标之后的内容


Ctrl+Y


粘贴Ctrl+U或Ctrl+K剪切的内容


Ctrl+R


在历史命令中搜索,按下该快捷键后会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索


Ctrl+D


退出当前终端


Ctrl+Z


暂停,并放入后台,该快捷键牵扯工作管理的内容


Ctrl+S


暂停屏幕输出


Ctrl+Q


恢复屏幕输出

(3)输入输出重定向

1)标准输入输出


设备


设备文件名


文件描述符


类型


键盘


/dev/stdin


0


标准输入


显示器


/dev/stdout


1


标准输出


显示器


/dev/stderr


2


标准错误输出

2)输出重定向


类型


符号


作用


标准输出重定向


命令 > 文件


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


命令 >> 文件


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


标准错误输出重定向


错误命令 2> 文件


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


错误命令 2>> 文件


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


正确输出和错误输出同时保存


命令 > 文件 2>&1


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


命令 >> 文件 2>&1


以追加的方式,把正确输出和错误输出都保存到同一个文件当中


命令 &> 文件


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


命令 &>> 文件


以追加的方式,把正确输出和错误输出都保存到同一个文件当中


命令 >> 文件1 2>> 文件2


把正确输出追加到文件1中,把错误输出追加到文件2中

例1:向test1文件中写入ls命令 的输出:

[[email protected] ~]# ls > test1

[[email protected] ~]# cat test1

anaconda-ks.cfg

hello.h

install.log

install.log.syslog

ntfs-3g_ntfsprogs-2014.2.15.tgz

test1

testfile

例2:将date命令的输出追加到test1中:

[[email protected] ~]# date >> test1

[[email protected] ~]# cat test1

anaconda-ks.cfg

hello.h

install.log

install.log.syslog

ntfs-3g_ntfsprogs-2014.2.15.tgz

test1

testfile

2015年 02月 21日 星期六 04:29:05 CST

例3:将错误输出写入test2文件中:

[[email protected] ~]# lis 2>> test2

[[email protected] ~]# lst >> test2 2>&1

[[email protected] ~]# date &>> test2

[[email protected] ~]# cat test2

-bash: lis: command not found

-bash: lst: command not found

2015年 02月 21日 星期六 04:37:31 CST

注:一般将不需要的输出直接丢进垃圾箱中,其相应的命令为:ls &> /dev/null

3)输入重定向

wc命令为统计命令,其格式为:

wc [选项] [文件名]

其中,-c选项表示统计字节数,-w选项表示统计单词数,-l选项表示统计行数

输入重定向一般的格式为:命令 < 文件,表示将文件作为命令输入,如:

[[email protected] ~]# wc < anaconda-ks.cfg

54  124 1272

(4)多命令顺序执行与管道符

1)多命令执行顺序


多命令执行符


格式


作用


;


命令1;命令2


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


&&


命令1&&命令2


逻辑与,当命令1正确执行,则命令2才会执行,当命令1执行不正确,则命令2不会执行


||


命令1||命令2


逻辑或,当命令1执行不正确,则命令2才会执行,当命令1正确执行,则命令2不会执行

例:

[[email protected] ~]# ls;date;cd /usr/;pwd

anaconda-ks.cfg  install.log         ntfs-3g_ntfsprogs-2014.2.15.tgz  test2

hello.h      install.log.syslog  test1                         testfile

2015年 02月 21日 星期六 04:51:56 CST

/usr

dd命令用于磁盘复制或数据复制,其格式为:

dd if=输入文件 of=输出文件 bs=字节数 count=个数

其中,if=输入文件指定源文件或源设备,of=输出文件指定目标文件或目标设备,bs=字节数表示一次输入/输出多少个字节,即这些字节看作数据块,count=个数表示输入/输出多少个数据块

例:向/root/testfile文件中写入/dev/zero的内容,共写入100M,同时显示存取时间:

[[email protected] usr]# date;dd if=/dev/zero of=/root/testfile bs=1k count=10000;date

2015年 02月 21日 星期六 05:01:43 CST

记录了10000+0 的读入

记录了10000+0 的写出

10240000字节(10 MB)已复制,1.29893 秒,7.9 MB/秒

2015年 02月 21日 星期六 05:01:44 CST

[[email protected] usr]# ll -h /root/testfile

-rw-r--r--. 1 root root 9.8M 2月  21 05:01 /root/testfile

注:判定一条命令是否正确执行,可以通过如下命令格式:

命令 && echo yes || echo no

2)管道符

管道符的命令格式为:

命令1 | 命令2

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

例:使用more命令显示/etc目录下文件的详细信息:

[[email protected] usr]# ll -a /etc/ | more

总用量 1796

drwxr-xr-x. 103 root root  12288 2月  21 03:59 .

dr-xr-xr-x.  26 root root   4096 2月  21 03:59 ..

drwxr-xr-x.   3 root root   4096 1月   7 22:12 abrt

drwxr-xr-x.   4 root root   4096 1月   7 22:22 acpi

-rw-r--r--.   1 root root     44 2月  17 20:44 adjtime

……

grep命令用于搜索,其命令格式为:

grep [选项] "搜索内容" 文件名

其中,-i选项表示忽略大小写,-n选项表示输出行号,-v选项表示反向查找,--color-auto选项表示搜索出的关键字用颜色显示。

(5)通配符与其他特殊符号

1)通配符


通配符


作用


?


匹配一个任意字符


*


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


[]


匹配中括号中任意一个字符


[-]


匹配中括号中任意一个字符,-表示一个范围,如[a-z]代表匹配一个小写字母


[^]


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

2)Bash中其他特殊符号


符号


作用


‘ ‘


单引号,在单引号中所有的特殊符号,如"$"和"`"(反引号)都没有特殊含义


" "


双引号,在双引号中特殊符号都没有特殊含义,但是"$"、"`"和"\"是例外,其特殊含义分别为"调用变量的值"、"引用命令"和"转义符"


` `


反引号,反引号括起来的内容是系统命令,在Bash中会先执行它,和$()作用一样,不过推荐使用$(),因为反引号容易看错


$()


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


#


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


$


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


\


转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\s将输出$符号,而不当做变量引用

例:单引号与双引号:

[[email protected] usr]# name=ws

[[email protected] usr]# echo "$name"

ws

[[email protected] usr]# echo ‘$name‘

$name

[[email protected] usr]# echo "$(date)"

2015年 02月 21日 星期六 05:29:24 CST

[[email protected] usr]# echo ‘$(date)‘

$(date)

例:反引号:

[[email protected] usr]# abc=`date`

[[email protected] usr]# echo $abc

2015年 02月 21日 星期六 05:31:57 CST

[[email protected] usr]# abc=$(date)

[[email protected] usr]# echo "$abc"

2015年 02月 21日 星期六 05:32:28 CST

时间: 2024-11-03 22:14:28

Linux学习笔记(15)shell基础之Bash基本功能的相关文章

Linux学习笔记:Shell基础正则表达式

Shell中经常用到正则表达式的命令包括grep.sed.awk 用于测试的文件内容 [[email protected] ~]# vi testfile Current Network Status Last Updated: Mon Feb 15 10:55:06 CST 2016 Updated every 90 seconds Nagios Core 4.1.1 - www.nagios.org Logged in as admin I like google It's Google, 

Linux学习笔记(17) Shell编程之基础

1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find.cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了. (2) 基础正则表达式 元字符 作用 * 前一个字符匹配0次或任意多次 . 匹配除了换行符外任意一个字符 ^ 匹配行首,如:^hello会匹配以hello开头的行 $ 匹配行尾,如:hello$会匹配以hello结尾的

linux笔记:shell基础和bash的基本功能

shell的优势:可以直接调用linux系统命令 shell脚本的基本写法:脚本名以.sh结尾程序的第一行为#!/bin/bash,告诉系统这是一个shell脚本以#作为注释shell脚本的执行方式:先赋予脚本执行权限,chmod:再用绝对路径或相对路径直接调用(因为shell是可执行程序,所以可以直接用路径来调用),如:/home/hqqq/test/t.sh bash的基本功能: 一.tab键文件和命令补全:如果只有一条匹配的,按一次就能自动补全:如果有多个匹配的,则按两次tab键,会出来提

Linux学习笔记之shell编程基础

编程语言: 机器语言.汇编语言 .高级语言 静态语言:编译性语言 ,特点: 强类型(变量在使用前,必须先声明,甚至还需要初始化):事先转换成可执行文件.包含语言如: C .C++.JAVA.C# 动态语言:解释性语言 ,特点: 弱类型(变量用时声明,甚至不区分类型):边解释边执行.包含语言如: ASP.ASP.NET .PHP .SHELL .Python .PERL 编程能力: 面向过程 :Shell.C 面向对象:Python .Perl .JAVA .C++ Bash :变量 类型 环境变

Linux学习笔记(二)-Shell教程

1. Shell教程 1. Shell教程 Shell是一个用c语言编写的程序,是用户使用Linux的桥梁.Linux既是一种命令语言,又是一种程序设计语言. Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务.. shell脚本:Shell脚本是一种为了Shell编写的脚本程序. shell环境:Shell编程跟Java,Php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以. 来自为知笔记(Wiz)

Linux学习笔记(三)-Shell命令机制

切换命令行:ctrl+alt+f1-f6 切换到图形界面:ctrl+alt+f7 ls-list(win下的dir) 白色:普通文件 蓝色:目录文件 绿色:可执行文件 执行步骤: 输入ls 在相关目录下去找命令程序(path,环境变量:/etc/environment),whereis+命令:查找该命令的可执行文件的位置 基于shell的基本类库Bash 底层的交互 GNU,FSF,Bash,Coreutils 来自为知笔记(Wiz)

Linux学习笔记__Linux操作系统基础

  Linux操作系统基础 一.Linux的基本原则: 1.由目的单一的小程序组成:组合小程序完成复杂任务: 2.一切皆文件: 3.尽量避免捕捉用户接口: 4.配置文件保存为纯文本文件. 二. 接口: GUI接口(图形接口): Gnome:c KDE:C++ XFace CLI接口(命令行接口): (命令提示符): #:root用户 $: 普通用户 Promt;sh;bash;csh;zsh;ksh;tcsh 三.命令格式: 命令   选项   参数 选项: 短选项:- 多个短选项可以组合:-a

Linux学习笔记 -- 为 Shell 传递参数

我们可以在执行 Shell 脚本时,可以向脚本传递参数.脚本内获取参数的格式为:$n.(n 代表一个数字,0为所执行的shell脚本名称,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……) 举例说明 我们先编写一个脚本,名字为test.sh,她的内容如下: #!/bin/bash echo "Shell 输出脚本名称及参数"; echo "执行的脚本名:$0"; echo "第一个参数为:$1"; echo "第二个

Linux学习笔记之命令技巧、bash支持的引号作用及文件通配符

命令技巧: 命令行使用技巧: Ctrl + a  光标跳转行首 Ctrl + e  光标跳转行尾 Ctrl + u  删除光标至行首的内容 Ctrl  + k  删除光标至行尾内容 Ctrl  + l  实现清屏 命令历史使用技巧: !n  执行命令历史中第N行命令 !-n  执行历史命令中倒数第N行命令 !!   执行上一条命令 !CHARACTER  执行历史命令中最近一次以CHARACTER开头的命令 !$ 引用前一个命令的最后一个参数 ESC 松开按.  引用前一个命令的最后一个参数 命