第一章
一.Shell概述
1.shell作用:命令解释器,“翻译官”,shell作为一个人机接口,用于解释用户输入的命令,将命令解释为,Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上,
用户请求–>shell–>Linux内核–>硬件
2.shell分类:Bourne和C,这两种语法彼此不兼容
二.Shell基础
1.命令别名:alias 别名='原命令’ (等号两边不能有空格)
alias的作用:仅在该次登入的操作,即输入一次alias后,这个修改只在当前的Shell生效。如果重新开启一个 Shell,或者重新登录,则这些alias将无法使用。
linux中alias永久化的方法:
<1>.若要每次登入就自动生效别名,则把别名加在/etc/profile或~/.bashrc中。然后# source ~/.bashrc
<2>.若要让每一位用户都生效别名,则把别名加在/etc/bashrc最后面,然后# source /etc/bashrc
2.删除别名:unalias 别名
3.(1) ;–>命令顺序执行,命令之间没有逻辑联系
(2)&&–>逻辑与:命令1正确,命令2才会执行,1不正确,2不执行
(3)|| -->逻辑或:命令1不正确,2才会执行,1正确,2不执行
4.管道符:命令1 | 命令2 (#命令1的正确输出作为命令2的操作对象)
5.tee:存储数据流处理过程中的某段信息
tee [-a] file
-a :以累加 (append) 的方式,将数据加入 file 当中!
例如: last | tee last.list | cut -d " " -f1
(# 这个范例可以让我们将 last 的输出存一份到 last.list 文件中;)
6.echo: echo [选项] [输出内容]
-e : 支持反斜线控制的字符
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
7.shell脚本的基本元素:(1) #!/bin/bash 必须的,指出shell的类型
(2)# 注释
(3)变量
(4)控制
8.运行shell脚本的方法:(1)sh ./datewho.sh
(2) chmod +x datewho.sh --》 ./datewho.sh
三.Shell中的变量和符号
- shell变量:可以保存如路径名、文件名或者一个数字
2.变量组成:可以由字母、数字和下划线组成,但是不能以数字开头。
(注意:在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。)
3.变量分类:(1)本地变量(用户变量) 局部变量只在创建它们的Shell中使用,可以在 shell程序内任意使用和修改它们。
(2)环境变量 可以在创建它们的Shell及其派生出来的任意子程序中使用。有些变量是用户创建的,其他的则是专用的(比如PATH、HOME)。是系统环境的一部分,不必去定义它们,可以在shell程序中使用它们 。还能在shell中加以修改。
(3)内部变量 由系统提供的。与环境变量不同,但用户不能修改它们
4.本地变量:变量名=值
(注意:(1)等号两边不可以有空格
(2)取值包含空格,必须用双引号括起来
(3)Shell变量可以用大小写字母,区分大小写)
5.变量的引用:(1) 变 量 名 ( 2 ) 变量名 (2) 变量名(2){变量名} (多个字符时)
6.显示变量:echo命令可以显示单个变量取值,变量名前加$(注意:echo ${name} are输出引用变量时加上{}比较好)
7.echo显示输出:echo [-ne][字符串] / echo [–help][–version]
-n 不要在最后自动换行
-e 打开反斜杠ESC转义。若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\t 插入tab;
\ 插入\字符;
-help 显示帮助
-version 显示版本信息
8.环境变量:(1)用于所有用户进程(通常称为子进程)。登陆进程称为父进程,通过pstree可以查看。(2)可以用于所有子程序,着包括编辑器、脚本和应用。(3)可以在命令行中设置,但用户注销时这些值将丢失。(4)环境变量均为大写。(5)必须用export命令导出。
9.设置环境变量:variable-name=val —> export variable-name(环境变量名大写)
10.显示环境变量:(1)env 可以看到所有的环境变量
(2)echo 环 境 变 量 名 ( 显 示 一 个 变 量 ) 11. 清 除 环 境 变 量 : u n s e t 环 境 变 量 名 12. ( 1 ) H O M E : 代 表 使 用 者 的 家 目 录 。 c d 去 到 使 用 者 的 家 目 录 或 者 利 用 c d 就 可 以 直 接 回 到 使 用 者 家 目 录 了 。 ( 2 ) P A T H : 就 是 执 行 文 件 搜 寻 的 路 径 , 目 录 与 目 录 中 间 以 冒 号 ( : ) 分 隔 , 由 于 文 件 的 搜 寻 是 依 序 由 P A T H 的 变 量 内 的 目 录 来 查 询 , 所 以 , 目 录 的 顺 序 也 是 重 要 的 。 13. 让 环 境 变 量 的 修 改 在 退 出 s h e l l 再 次 登 录 时 仍 有 效 , 需 要 在 相 关 配 置 文 件 中 修 改 。 B a s h 的 初 始 化 文 件 有 : / e t c / p r o f i l e 、 / . b a s h p r o f i l e 、 / . b a s h l o g i n 、 / . p r o f i l e 、 / . b a s h r c 、 / e t c / b a s h r c 14. b a s h p r o f i l e 只 在 会 话 开 始 的 时 候 读 取 一 次 , 而 b a s h r c 则 每 次 打 开 终 端 时 都 会 读 取 15. 内 部 变 量 : ( 1 ) 环境变量名 (显示一个变量) 11.清除环境变量:unset 环境变量名 12.(1)HOME : 代表使用者的家目录。cd ~ 去到使用者的家目录 或者利用 cd 就可以直接回到使用者家目录了。 (2)PATH : 就是执行文件搜寻的路径,目录与目录中间以冒号(:)分隔, 由于文件的搜寻是依序由 PATH 的变量内的目录来查询,所以,目录的顺序也是重要的。 13.让环境变量的修改在退出shell再次登录时仍有效,需要在相关配置文件中修改。 Bash的初始化文件有:/etc/profile、~/.bash_profile、~/.bash_login、~/.profile、~/.bashrc、/etc/bashrc 14.bash_profile只在会话开始的时候读取一次,而bashrc则每次打开终端时都会读取 15.内部变量:(1) 环境变量名(显示一个变量)11.清除环境变量:unset环境变量名12.(1)HOME:代表使用者的家目录。cd 去到使用者的家目录或者利用cd就可以直接回到使用者家目录了。(2)PATH:就是执行文件搜寻的路径,目录与目录中间以冒号(:)分隔,由于文件的搜寻是依序由PATH的变量内的目录来查询,所以,目录的顺序也是重要的。13.让环境变量的修改在退出shell再次登录时仍有效,需要在相关配置文件中修改。Bash的初始化文件有:/etc/profile、 /.bashprofile、 /.bashlogin、 /.profile、 /.bashrc、/etc/bashrc14.bashprofile只在会话开始的时候读取一次,而bashrc则每次打开终端时都会读取15.内部变量:(1)# ——传送给shell程序的位置参数的数量
(2)$?——最后命令的完成码或者在shell程序内部执行的shell程序(返回值)。 0表示没有错误,其他任何值表明有错误。
(3) 0 — — s h e l l 程 序 的 名 称 ( 4 ) 0——shell程序的名称 (4) 0——shell程序的名称(4)@——调用shell程序时所传送的全部参数的单字符串,
“参数1”“参数2”…形式保存的参数
(5)KaTeX parse error: Unexpected character: '' at position 21: …1 参数2”…形式保存的参数 ̲ (6)n 第n个参数
(7)$$ 本程序的PID
16.shell中的特殊符号:(1)注释符#:(除了#!/bin/bash里的#特殊)
(2)变量符:与反斜杠转义符相反,使其后的普通字符作为变量名,如 a 表 示 变 量 a 的 值 。 变 量 字 符 长 度 超 过 1 个 时 , 用 括 起 来 ( 3 ) 单 引 号 : 被 引 起 的 字 符 全 部 做 普 通 字 符 , 即 全 部 原 样 ( 4 ) 双 引 号 : 引 号 内 的 内 容 , 除 a表示变量a的值。变量字符长度超过1个时,用{}括起来 (3)单引号:被引起的字符全部做普通字符,即全部原样 (4)双引号:引号内的内容,除 a表示变量a的值。变量字符长度超过1个时,用括起来(3)单引号:被引起的字符全部做普通字符,即全部原样(4)双引号:引号内的内容,除、转义符\、倒引号`这三个保留特殊功能,其他字符均做普通字符。
(5)倒引号:引号内的字符串当做shell命令行解释执行,得到的结
果取代整个倒引号括起来的部分
(6)反斜线:反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(\)能够阻止shell把后面的字符解释为特殊字符。(注意:在单引号括起来的字符串中,反斜线也成为普通字符,而失去转义字符功能)
(7)获取字符串长度:string=“abcd”
echo ${#string} #输出 4
(8)提取子字符串:string=“runoob is a great site”
echo ${string:1:4} # 输出 unoo