bash shell学习-基础 (笔记)

  When you hoist the sails to cross the sea, you willride the wind and cleave the waves.

  "长风破浪会有时,直挂云帆济沧海"

参考资料鸟哥的Linux私房菜 基础学习篇(第三版)

一、认识shell

  1、什么是shell

    shell是一种“提供使用者界面”来实现用户与内核通信的软件(命令解释器)

  2、为什么要学习shell

    ①命令行界面的shell在各大Linux发行版中都一样;

    ②远程管理时命令行界面速度较快;

    ③可以高效地管理Linux;

  3、系统的合法shell

    系统上合法的shell都保存在 /etc/shells 文件中,默认是bash

  4、bash shell的优点

    ①命令记忆(history);

    ②命令与文件补全(Tab键);

    ③命令别名设置(alias);

    ④作业控制,前台、后台控制;

    ⑤程序脚本(shell script);

    ⑥通配符;

  5、内置命令: type

1 #用法:type [-tpa] name
2 #功能:查询name表示的命令是外部命令、shell内嵌命令还是命令别名设置的名称

二、shell变量

  1、变量的显示: echo $var    #显示var的内容

  2、变量的设置规则(重点):

    ①变量与变量内容以一个等号“=”来连接;

    ②等号两边不能直接接空格符;

    ③变量名称只能是英文字母和数字,且开头只能是字母;

    ④变量内容有空格时使用双引号将内容括起来;

    ⑤可用转义字符“\”将特殊符号([Enter]、$、\、空格、!等)变成一般字符;

    ⑥使用单引号“`”或者“$(命令)”来获得其他命令提供的信息;

    ⑦增加变量内容时可以直接在变量后面累加内容,如:PATH=$PATH:/bin,在PATH后面加上“:/bin”;

    ⑧若该变量需要在其他子进程执行,则应该使用export var使该变量变成环境变量;

    ⑨通常大写字符为系统默认变量,自行设置的变量可以使用小写字符;

    ⑩取消变量的方法: unset var 

  3、用 env 查看环境变量,用 set 查看所有变量,用 export 将变量设置为环境变量

  4、常见环境变量说明(重点):

    HOME:代表用户的主文件夹

    SHELL:当前环境使用的shell

    HISTSIZE:记录的历史命令的最大条数

    MAIL:邮件信箱文件

    PATH:执行文件的查找路径

    LANG:语系数据

    RANDOM:随机数变量,随机数生成器为/dev/random这个文件

    PS1:命令提示符

    $:本shell的PID

    ?:上个命令执行的回传码

    OSTYPE,HOSTTYPE,MACHTYPE:主机硬件与内核等级

  5、查询支持的语系: locale -a

  6、语系设置:使用 locale 查看变量,直接修改对应变量即可

  7、变量的有效范围:环境变量 == 全局变量   自定义变量 == 局部变量

  8、变量的读取: read [-pt] var   #从标准输入读取var的内容,-p后跟提示信息,-t后跟等待时间(s)

  9、变量的声明: declare [-aixr] var   #声明变量并指明类型,-a(数组),-i(整数),-x(环境变量),-r(只读),默认为字符串

  10、与文件系统及程序的限制关系: ulimit [-SHacdfltu] [配额]   #设置配额,-a参数为列出所有限制数据的值

  11、变量内容删除、替代与替换:

 变量设置方式  说明
${变量#关键字} 若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除 
${变量##关键字}  若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除 
${变量%关键字}  若变量内容从尾向前的数据符合“关键字”,则将符合的最短数据删除
${变量%%关键字}  若变量内容从尾向前的数据符合“关键字”,则将符合的最长数据删除 
${变量/旧字符串/新字符串}  若变量内容符合“旧字符串”,则第一个旧字符串会被新字符串替换
${变量//旧字符串/新字符串}  若变量内容符合“旧字符串”,则全部的旧字符串会被新字符串替换 

 

  12、变量的测试与内容替换

变量设置方式 str没有设置 str为空字符串 str已设置为非空字符串
var=${str-expr} var=expr var= var=$str
var=${str:-expr} var=expr var=expr var=$str
var=${str+expr} var= var=expr var=expr
var=${str:+expr} var= var var=expr
var=${str=expr}
str=expr

var=expr


str不变

var=


str不变

var=$str

var=${str:=expr}
str=expr

var=expr


str=expr

var=expr


str不变

var=$str

var=${str?expr} expr输出至stderr var= var=str
var=${str:?expr} expr输出至stderr expr输出至stderr var=str

三、命令别名与历史命令

  1、命令别名设置

1 alias   #查看当前已设置的命令别名
2 alias new_cmd=‘old_cmd‘   #将old_cmd命令(包含选项和参数)设置为new_cmd
3 unalias new_cmd   #取消别名设置

  2、历史命令

1 history [n-carw] [histfiles]   #查看曾经执行过的命令
2 !n   #执行第n条命令
3 !!   #执行上一条命令
4 !cmd  #执行最近的以cmd开头的命令

  3、历史命令的保存文件: ~/.bash_history,文件总共保存HISTSIZE条命令,注销时更新

四、Bash shell的操作环境

  1、路径与命令查找顺序:

    ①以相对/绝对路径执行命令;

    ②由alias找到该命令来执行;

    ③由bash内置的(builtin)命令来执行;

    ④通过$PATH这个变量的顺序找到第一个命令执行;

  2、bash的登录与欢迎信息:通过编辑 /etc/issue 和 /etc/motd 来修改

  3、bash的环境配置文件: /etc/profile、/etc/inputrc、/etc/profile.d/*.sh、/etc/sysconfig/i18n、/etc/bashrc、~/.bash_profile、~/.bash_login、~/.bash_logout、~/.bash_history、~/.profile、~/.bashrc

  4、读入环境配置文件: source ‘配置文件名‘   #source可用 ‘.‘ 替换

  5、通配符与特殊符号

通配符 意义
* 代表0到无穷多个任意字符
? 代表一定有一个任意字符
[] 代表一定有一个在中括号内的字符
[-] 代表在编码顺序内的所有字符
[^] 代表除了括号内的字符以外的其他任意一个字符
特殊符号 内容
# 批注符号,在script中,其后的内容为注释
\ 转义符号,将特殊字符或通配符还原成一般字符
| 管道
; 连续命令执行的分隔符
~ 用户的主文件夹
$ 使用变量的前导符
& 作业控制符,将命令变成后台运行
! 逻辑运算中的“非(not)”
/ 目录符号,路径分隔符
>,>> 数据流重定向,输出导向,分别是“替换”与“累加”
<,<< 数据流重定向,输入导向
‘‘ 单引号,不支持变量扩展
"" 双引号,支持变量扩展
`` 反引号,其中的命令为先执行的命令,也可以使用$()
() 括号中间为子shell的起始与结束
{} 中间为命令块的组合

五、数据流重定向

  1、标准输入、输出和标准错误:0、1、2

  2、垃圾桶黑洞设备与特殊写法

1 cmd 2> /dev/null   #将cmd执行产生的错误信息导入黑洞文件/dev/null中
2 cmd 2>&1         #将标准错误重定向到标准输出
3 cmd << "eof"      #将“eof”作为标准输入结束的标志

  3、命令执行顺序

命令执行情况 说明
cmd1; cmd2 按顺序执行cmd1和cmd2
cmd1 && cmd2 只有cmd1执行成功时才执行cmd2
cmd1 || cmd2 只有cmd1执行失败时才执行cmd2

六、管道命令

  1、选取命令: cut,grep

1 #命令:cut -d ‘分隔字符‘ -f 段数  或  cut -c 字符范围
2 #功能:将同一行里面的数据进行分解,可以取出我们所需要的数据
3 #命令:grep [-acinv] [--color=auto] ‘查找字符串‘ filename
4 #功能:解析一行文字,若该行有关键字,则取出该行

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

1 #命令:sort [-fbMnrtuk] [file or stdin]   #对数据进行排序
2 #命令:uniq [-ic]   #-i忽略大小写,-c进行计数
3 #命令:wc [-lwm]   #-l仅列出行,-w仅列出字数(英文单字),-m字符个数,默认输出行、字数、字符数

  3、双向重定向: tee

1 #命令:tee [-a] file   #将数据重定向到标准输出和file指定的文件,-a参数指出以累加的方式导入数据 

  4、字符转换命令: tr,col,join,paste,expand

1 #命令:tr [-ds] SET1   #-d删除信息当中的SET1,-s替换重复的字符
2 #主要用途:删除或者替换一段信息中的文字
3 #命令:col [-xb]   #-x将tab转换为对等的空格键,-b在文字内有反斜杠(/)时,仅保留反斜杠最后接的那个字符
4 #主要用途:经常被用来将man page转存为纯文本文件以方便查阅
5 #命令:join [-ti12] file1 file2   #-t后跟分隔符,默认为空格,-i忽略大小写,-1后跟第一个文件要比较的字段序号,-2后跟第二个文件要比较的字段序号
6 #主要用途:将两个文件中有相同数据的那一行加在一起,注意要处理的信息应该已排好序
7 #命令:paste [-d] file1 file2   #直接将两行贴在一起,可以通过-t指出要使用的分隔符,默认为tab
8 #命令:expand [-t] file   #将tab转换为空格键,-t指出一个tab转换为多少个空格

  5、切割命令: split

1 #命令:split [-bl] file PREFIX   #将文件切割为若干个小文件,-b后可接欲切割成的文件大小,-l后跟一个整数,指明按多少行为一个文件来切割,PREFIX为切割文件的前导文字 

  6、参数代换: xargs

1 #命令:xargs [-0epn] cmd   #将数据切割,作为下一个命令的参数
2 #主要用途:通过xargs来为那些不支持管道的命令提供该命令引用标准输入之用

  7、减号‘-’的用途:将前一个命令的标准输出作为这次命令(不支持管道)的标准输入

时间: 2024-10-14 14:19:58

bash shell学习-基础 (笔记)的相关文章

Bash Shell脚本编程笔记总结(二)

本文接上一部分:Bash Shell脚本编程笔记总结(一) 数组: 连续的多个独立内存空间,每个内存空间相当于一个变量 数组元素:数组名+索引 索引:从0开始编号 声明数组: declare -a ARRAR_NAME 关联数组: declare -A ARRAY_NAME 支持稀疏格式: 数组元素的赋值: (1) 一次只赋值一个元素 ARRAY[index]=VALUE a[0]="hello" (2) 一次赋值全部元素 ARRAY=("mon" "tu

Bash Shell脚本编程笔记总结(一)

本文是上课笔记总结,涉及细节知识点会在以后文章说明! bash脚本编程: 脚本程序:解释器解释执行: shell: 交互式接口:编程环境: shell: 能够提供一些内部命令,并且能通过PATH环境变量找到外部命令:把命令提交给内核启动为进程: 编程环境: 流程控制语句: 顺序执行: 循环执行: 选择执行: 条件测试:真.假 $? 命令的状态结果: 0: 真 1-255: 假 过程式的编程语言的元素:变量.流程.函数.数组 变量:局部变量.本地变量.环境变量.位置参数变量.特殊变量 变量: 数值

GNU Bash Shell 编程图解笔记

bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写.1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell.它也被移植到Microsoft Windows上的Cygwin与MinGW,或是可以在MS-DOS上使用的DJGPP项目.在Novell NetWare与Andriod在上也有移植.1990年后,Chet Ramey成为了主要的维护者

bash shell学习笔记(一)—— 常用命令

一.基本的bash shell命令 1.默认bash shell 提示符是美元符号($); 2.bash手册 使用man命令来访问存储在Linux系统上的手册页面,如: bogon:~ Mac$ man kill KILL(1)                   BSD General Commands Manual                  KILL(1) NAME kill -- terminate or signal a process SYNOPSIS kill [-s sig

bash shell学习 01(配置和启动脚本)

bash是 Bourne Again Shell简称 ,从unix系统的sh发展而来 查看当前shellecho $SHELL查看系统支持的shellcat /etc/shells cd /binls -la *sh 一. bash shell的配置变量可分为自定义变量和环境变量他们作用范围不同set 可以查看所有变量set|more 查看 enter一行一行查看set|less enter换行 pagedown换页 q退出 env只能查看环境变量 bash shell的设置方式1.通过自定义变

BASH SHELL 脚本基础

什么是shell     Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言.命令解释程序及程序设计语言的统称. shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层.当从shell或其他程序向Linux传递命令时,内核会做出相应的反应.            shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用.用户在提示符下输入的命令都

Bash shell编程基础

1.何谓shell script shell script是利用shell的功能写一个"程序",这个程序是使用纯文本文件,将一些shell的语法与命令(包括外部命令)写在里面,搭配正则表达式,管道命令与数据流重定向,条件判断语句等功能,以达到我们所想要的处理目的. 2.脚本或程序源文件都是纯文本文件. 3.脚本或程序的执行一般有两种方式: 编译执行:预处理-->编译-->汇编-->链接:编译执行是一种计算机语言的执行方式. 由编译程序将目标代码一次性编译成目标程序,再

bash shell学习-shell script基础 (笔记)

A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux Shell脚本攻略     Linux程序设计(第四版) 一.什么是shell script 1.什么是shell script 简单来说,shell script(程序化脚本)是利用shell功能所写的一个“程序”,它拥有自己的语法特性 2.为什么要学shell script 对于一个初学者来说,我觉得就那

bash shell学习-正则表达式基础 (笔记)

A gentleman is open-minded and optimistic; a small person is narrow-minded and pessimistic. "君子坦荡荡,小人长戚戚" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) 一.正则表达式基础 1.什么是正则表达式 正则表达式(Regular Expression, RE)是对字符串操作的一种逻辑公式,就是用一些事先定义好的特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串