bash Shell 总结

man bash

1. shell 的工作原理 (1)

内核 <---> shell <---> 用户

父进程 fork --> wait

子进程 exec --> exit

相关man文档:

fork(2)

clone(2)

execve(2)

exit_group(2)

exit4(2)

strace(1) -->strace -e

2. shell 语法 (2)

1. 简单命令 (kw: Simple Commands)

基本形式:command [arg]...

范例:

cd

ls -l

cp /data/log /backup/log

2. 管道 (kw: Pipelines)

基本形式:cmd1 | cmd2 | cmd3   -->管道+小命令=复杂命令

左边命令的标准输出作为右边命令的标准输入

用|&代替|,可以把标准错误也一起传给右边

管道中的每一个命令都在子进程中执行

管道中的命令同时运行

管道的返回状态是管道最右边的命令的返回状态

范例:

ls /students|wc -l

ip a| grep -w inet

3. 列表 (kw: Lists)

一系列的管道就是列表

列表中用于分割管道的符合有:

;: 命令按顺序从左到右执行

&: 命令同时执行

&&: 左边成功才执行右边

||: 左边失败才执行右边

列表的结尾可以有; &,如果是&,则最右边的管道放在后台执行

4. 复合命令 (kw: Compound Commands)

(list) 列表作为一个整体在子进程中执行

{ list; } 列表作为一个整体在当前进程中执行

((expression)) 算术运算

((n++))

((total=$first + $last))

[[ expression ]]  当表达式为真时,返回0,否则返回非0,支持正则

if, case, for, while 这些都是shell的流程控制指令

3. 引用 (1), (kw: QUOTING)

shell 中的引用符号用于去除特殊字符的特殊意义

1. 双引号 不能转义 $

2. 单引号 转义所有的符合,除了'本身

3. 反斜杠 单个字符

4. 参数 (2), (kw: PARAMETERS)

Shell 参数是存放“值”的“东西”,它可以是一个名字,一个数字,或者是一些特殊符号。

1. 变量

2. 位置参数 (kw: Positional Parameters)

3. 特殊参数 (kw: Special Parameters)

$*: 所有位置参数合并成的一个字符串

[email protected]: 所有位置参数,如果放在双引号里面,则保存参数的边界

4. shell 内置变量 (kw: Shell Variables)

5. 阵列 (kw: Arrays)

a=(e1 e2 e3)

declare -A a

a[x]=1

a[y]=2

${name[0]}      <-- 获取第0个元素

${#name[*]}     <-- 阵列的长度

${!name[*]}     <-- 阵列的keys

${name[*]}      <-- 阵列的values

unset name      <-- 删除整个阵列

unset name[0]   <-- 删除阵列中的一个元素

5. 展开 (2), (kw: EXPANSION)

shell 在执行命令之前,会对读到的命令行字符串做一系列的展开操作,常见的展开操作有:

1. 大括号展开 (kw: Brace Expansion)

{1..10}, {1..10..2}, {a..z}

d{1,2,3} -> d1 d2 d3

$ cp -v /tmp/a/b/c/deep{,2}

‘/tmp/a/b/c/deep’ -> ‘/tmp/a/b/c/deep2’

2. 波浪号展开 (kw: Tilde Expansion)

~: 当前用户的家目录

~user:指定用户的家目录

~+: 当前工作目录

~-: 上一个工作目录

3. 参数展开 (kw: Parameter Expansion)

$, ${name}

${name:-default}        <-- 默认值

${name:offset}          <-- 截取字符串

${name:offset:length}   <-- 截取一定长度的字符串

${#name}                <-- 计算字符串长度

${name#word}            <-- 删除字符串头部

${name%word}            <-- 删除字符串尾部

${name/pattern/string}  <-- 字符串替换

${name^pattern}         <-- 转换成大写

${name,pattern}         <-- 转换成小写

4. 命令替换 (kw: Command Substitution)

$(cmd list)     <-- 当前应该使用这个

`cmd list`      <-- 过时语法

5. 算术展开 (kw: Arithmetic Expansion)

$((expression))     <-- 当前应该使用这个

$[expression]       <-- 过时语法

6. 进程替换 (kw: Process Substitution)

<(cmd list)

>(cmd list)

7. 路径名展开 (kw: Pathname Expansion)

*, ?, []

能展开则展开,不能展开则保持原样

6. 重定向 (1.5), (kw: REDIRECTION)

在一个命令执行之前,它的输入和输出可能被shell重定向,重定向操作有以下功能:

重定向输入 (kw: Redirecting Input, Here Documents, Here Strings)

wc -l < file

cmd <<EOF

..

EOF

cmd <<< "string"

重定向输出 (kw: Redirecting Output)

复制文件描述符 (kw: Duplicating File Descriptors)

exec 4>&3   <-- 把3 复制成4

移动文件描述符 (kw: Moving File Descriptors)

exec 4>&3-  <-- 把3 移动到4

关闭文件描述符

exec 3>&-   <-- 关闭3

以读写方式打开文件描述符 (kw: Opening File Descriptors for Reading and Writing)

exec 3<>file    <-- 以读写形式打开

0 stdin

1 stdout

2 stderr

7. 算术运算 (0.5)

bash shell 支持整数算术运算

1. ((expression)) (kw: ARITHMETIC EVALUATION)

2. $((expression)) (kw: Arithmetic Expansion)

3. 小数运算

bc, python, awk

8. 简单命令的展开 (0.5), (kw: SIMPLE COMMAND EXPANSION)

shell 执行简单命令时,在实际执行之前,会做以下操作:

1. 取出变量赋值和重定向部分

2. 对余下部分做展开操作

3. 执行重定向操作

4. 执行变量赋值操作

简单命令展开完后,如果展开的结果中有命令名,则流程去到“命令的执行”阶段。

9. 命令的执行 (1), (kw: COMMAND EXECUTION)

1. 如果命令名不包含斜杠,就按顺序搜索命令:

1. 函数

2. 内部命令

3. 搜索PATH 中的目录

2. 如果搜索成功,或者命令名包含了斜杠,则开始执行。

3. 如果搜索失败,或者程序文件不存在,则返回127。

10. 命令的执行环境 (0.5), (kw: COMMAND EXECUTION ENVIRONMENT)

1. 打开的文件

2. 当前工作目录

3. umask

4. 信号trap   -->进程通讯

5. shell 变量

6. shell 函数

7. shell 的功能选项(set, shopt) set -o vim/emacs

8. shell 別名

9. 各种进程ID ($$, $PPID)

11. 环境变量 (0.5), (kw: ENVIRONMENT)

当一个命令被执行的时候,会有一个字符串阵列(列表)传给它,这个阵列叫做“环境”,也叫“环境变量”。

shell 的环境变量可以传给子进程。设置shell 的环境变量的命令:

1. export

export time         <-- 把time 设置成环境变量

export -n time      <-- 使time 编程非环境变量

2. declare

declare -x time     <-- 把time 设置成环境变量

declare +x time     <-- 使time 编程非环境变量

12. shell 的内部命令 (4.5), (kw: SHELL BUILTIN COMMANDS)

shell的内部命令默认在当前进程执行,常用的有

01. :  空命令

02. ., source

点命令(source)把文件里面的代码读到“当前进程”中执行。

03. break, continue

break       <-- 结束整个循环

continue    <-- 结束当前循环,进入下一轮循环

04. cd, pwd

cd          <-- 必须是内部命令

05. declare, export, readonly, local

06. set, unset, shopt   -》set改变shell的开关

07. echo, read, printf

08. exec

09. exit, return

10. kill, trap

11. shift

12. test, [

13. wait

原文地址:http://blog.51cto.com/395469372/2097407

时间: 2024-11-10 14:21:18

bash Shell 总结的相关文章

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 的算术运算有四种方式

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1:使用 expr 外部程式加法 r=`expr 4 + 5`echo $r注意! '4' '+' '5' 这三者之间要有空白r=`expr 4 * 5` #错误乘法 r=`expr 4 \* 5`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2:使用 $(( ))r=$(( 4 + 5 ))echo $r~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3:使用 $[ ]r=$[ 4 + 5

第3章 基本的bash shell命令

启动shell GNU bash shell提供对Linux系统交互式访问.他以常规程序运行,通常在用户登录终端时启动.登录时具体启动那种shell依据用户配置文件/etc/passwd . /etc/passwd 包含所有系统用户账户列表以及每个用户的基本信息.eg:其中一个条目 christine:x:501:501:Christine Bresnahan:/home/christine:/bin/bash 说明: 每个条目有7个字段,字段之间用冒号“:”分隔 用户名 用户密码(如果密码存储

bash shell环境变量

$* 将所有命令行参数当做单个文本值包含 [email protected] 将所有命令行参数当做独立的文本值包含 $# 命令行参数数目 $? 最近使用的前端进程的退出状态码 $- 当前命令选项标记 $$ 当前shell的进程ID(PID) $! 最近执行的后台进程PID $0 来自命令行的命令名称 $_ shell的绝对路径名 BASH 用来调用shell的全文件名 BASH_ARGC 当前子函数中的参数数目 BASH_ARGV 含有所有指定命令行参数的数组 BASH_COMMAND 当前正在

Bash shell使用环境的终端的环境设置:stty

Bash shell使用环境的终端的环境设置:stty stty -a 将当前所有的stty参数列出来 intr:给正在运行的程序发送中断信号 quit:给正在运行的程序发送退出信号 erase:向前删除字符 kill:删除命令行上的文字 eof:文件结束,输入结束 start:重启暂停的输出 stop:停止当前的输出 susp:给正在运行的程序发送一个终端停止信号 rprnt:输入命令时提示使用过的历史命令 werase:删除命令行的最后一个字 ^可以理解为Ctrl键,所以intr的快捷键就是

linux杂记(十)?what is BASH Shell

first,what is shell?其实只要是碰过计算机的,对于OS(Operation System操作系统,不管是linux.unix.windows)有点概念的人大多都听过这个名词,因为只要有OS那么就离不开Shell.其实Shell就是将我们输入的指令与kernel(核心)的沟通,使kernel可以控制hardware硬件(例如声卡,网卡,显卡)来正确无误工作. 基本上,替我们工作的是[hardware],控制硬件的是[kernel],而我们user则是利用[shell]控制一些ke

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发行版中都一样: ②远程管理时命令行界

第十一章、认识与学习 BASH Bash Shell 的操作环境

Bash Shell 的操作环境: 配置值分为系统整体配置值与各人喜好配置值, 仅是一些文件放置的地点不同! 路径与命令搜寻顺序 一个命令 (例如 ls) 被下达时, 到底是哪一个 ls 被拿来运行? 以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』: 由 alias 找到该命令来运行: 由 bash 内建的 (builtin) 命令来运行: 透过 $PATH 这个变量的顺序搜寻到的第一个命令来运行. 可以发现ls有颜色但是/bin/ls则没有颜色. 因为 /bin/ls

Linux 常用命令解析及Bash Shell脚本用法示例

 摘要 Linux 命令是基于文本格式输入输出的一种程序,按照Unix哲学中强调的程序功能简单,输入宽松,输出严谨,各种程序组合可以具有更强大的功能,而具有这种灵活性的主要原因是Linux规定程序的输入输出必须坚持文件流格式,即文本格式,而这就是Linux系统的核心之一. 对于Bash,即Shell的一种,为现在主流Linux发行版本默认的命令行解释器,是一种功能强大的工具,可以实现对Linux支持的程序命令的组合,从而实现强大功能.类似于Window系统的bat文件,Bash具有更为强大的

bash shell 数字时间钟表

在某行或者某个位置,打印出"YY/MM/DD HH:MM:SS" 先确定位置 再输出即可 注:有关时间格式到问题 %Y: %B: %d %H:%M:%S 定位以及光标到问题: tput cup 10 10 tput sc, tput rc, tput civis, tput cnorm #!/bin/sh tput civis while true do         tput sc         #tput clear         tput cup 17 10