BASH入门

1.变量定义

变量=变量内容 如myName=Jocelyn
知识点如下:

  • 等号连边不能有空格
  • 变量只能以英文开头,只能是英文字母与数字。
  • 变量内容有空格可用双引号"(特殊字符保留原有特性) 或单引号'(特殊字符仅为一般字符)将内容结合起来
  • 可用跳脱字符\ 将特殊字符转为一般字符。
  • 变量追加内容 myName="$myName":Brown
  • 变量需要在其他子程序执行,需要以export来使变量变成环境变量。
  • 通常系统变量使用大写字符,自定义一般使用小写字符。
  • 取消变量的方法使用 unset: [unset 变量名称]
2.查看变量
  • env 可用于观察环境变量
  • export 展示所有环境变量
  • set 可观察所有变量
    几个比较重要的参数
      • PS1 『命令提示字符』
    • \d :可显示出『星期 月 日』的日期格式,如:"Mon Feb 2"
    • \H :完整的主机名。举例来说『study.centos.jocelyn』
    • \h :仅取主机名在第一个小数点之前的名字,如鸟哥主机则为『study』后面省略
    • \t :显示时间,为 24 小时格式的『HH:MM:SS』
    • \T :显示时间,为 12 小时格式的『HH:MM:SS』
    • \A :显示时间,为 24 小时格式的『HH:MM』
    • @ :显示时间,为 12 小时格式的『am/pm』样式
    • \u :目前使用者的账号名称,如『dmtsai』;
    • \v :BASH 的版本信息,如鸟哥的测试主机版本为 4.2.46(1)-release,仅取『4.2』显示
    • \w :完整的工作目录名称,由根目录写起的目录名称。但家目录会以 ~ 取代;
    • \W :利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名。
    • # :下达的第几个指令。
    • $ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $ 啰~
      ps:更改参数可以修改成自己习惯的命令提示符
      • $ 『关于本shell的PID』
      • ? 『上个指令的回传值』
      • OSTYPE,HOSTTYPE,MACHTYPE 『主机硬件与核心等级』
      • export 『自定义变量转换为环境变量』
    • locale 查看语系变量
      配置文件在/etc/locale.conf
3.变量的有效范围

环境变量可在bash以及子程序中使用。自定义的变量只能在爱自身中使用。可通过export将自定义变量变为环境变量。

read,array,declare

 read [-pt] variable
    -p:提示符
    -t:等待的秒数

declare/typeset『宣告变量的类型』

declare [-aixr] variable
    -a:定义为array类型
    -i:定义为interger类型
    -x:定义为环境变量
    -r:定义为readonly,不可更改也不能unset
    ps: 默认为字符串,bash中的数值运算只到整数形态。
array 一维数组

ulimit 文件系统与程序的限制关系

ulimit [-SHacdfltu] [配额]
选项与参数:
-H :hard limit ,严格的设定,必定不能超过这个设定的数值;
-S :soft limit ,警告的设定,可以超过这个设定值,但是若超过则有警告讯息。
在设定上,通常 soft 会比 hard 小,举例来说,soft 可设定为 80 而 hard 设定为 100,那么你可以使用到 90 (因为没有超过 100),但介于 80~100 之间时, 系统会有警告讯息通知你!
-a :后面不接任何选项与参数,可列出所有的限制额度;
-c :当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),
这种文件就被称为核心文件(core file)。此为限制每个核心文件的最大容量。 -f :此 shell 可以建立的最大文件容量(一般可能设定为 2GB)单位为 Kbytes
-d :程序可使用的最大断裂内存(segment)容量; -l :可用于锁定 (lock) 的内存量
-t :可使用的最大 CPU 时间 (单位为秒)
-u :单一用户可以使用的最大程序(process)数量。

变量内容的删除与替代
没看懂 ...

别名与历史命令
alias 与 unalias
alias ll="ls -al"
unalias ll
需要注意的是alias仅在当前的shell中生效,需要永久生效则需要更改 ~/.bashrc

history

history [n][-c]
    history [-raw] histfiles
    n:列出最近n笔命令
    -c: 将当前的shell的history清空
    -a: 将目前新增的history指令新增入histfiles中,没有histfiles则谢雨~/.bash_history
    -r: 将 histfiles的内容读取到目前shell的history中
    -w: 将目前的history写入histfiles中。
!
    !number !command !!
    number: 执行第几笔的意思
    command: 最近的指令向前搜寻并执行
  !!: 执行上一个指令           

type -a command 查找指令搜寻顺序,先找到哪个就以哪个执行。

/etc/issue,/etc/motd bash的进站与欢迎讯息,简单提下 有兴趣的再细看。

bash的环境配置文件

login-shell会读取下面两个文件

1. /etc/profile:这是系统整体的设定,你最好不要修改这个文件;(不过很多重要的设定都在这个文件里。)   /etc/profile.d/*.sh 所有的.sh 文件都会被呼入,可以观察下自己主机下有哪些脚本。
2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人设定可以定制。依照顺序读取,
前一个存在则不会往后读了。

source :读入环境配置文件的指令 可以不登出直接读取环境配置文件。
non-login shell 只会读

~/.bashrc

/etc/man_db.conf 有时候说明文档需要手动加进来,才能用man查看

~/.bash_history 历史指令记录

~/.bash_logout 注销bash后,系统做了什么动作再离开。可做一些备份或整理工作。

stty、set 终端机的设定,不建议修改~ 还是适应标准比较好呢。
列一下终端机的热键

    Ctrl + c 终止当前命令
    Ctrl + d EOF 输入结束
    Ctrl + m Enter
    Ctrl + s 暂停屏幕输出
    Ctrl + q 恢复屏幕输出
    Ctrl + u 在提示字符下,将整列命令删除
    Ctrl + z 暂停 目前命令(不在屏幕上输出)在后台运行

Bash中的特殊符号
|符号 |内容 |
|-------|-----------:|
| # |批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不执行|
| \ |跳脱符号:将『特殊字符或通配符』还原成一般字符|
| | | 管线 (pipe):分隔两个管线命令的界定(后两节介绍)|
| ; |连续指令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同)|
| ~ |用户的家目录|
| $ |取用变数前导符:亦即是变量之前需要加的变量取代值|
| & |工作控制 (job control):将指令变成背景下工作|
| ! |逻辑运算意义上的『非』 not 的意思!|
| / |目录符号:路径分隔的符号|
| > >> |数据流重导向:输出导向,分别是『取代』与『累加』|
| < <<< |数据流重导向:输入导向 (这两个留待下节介绍)|
| '' |单引号,不具有变量置换的功能 ($ 变为纯文本)|
| "" |具有变量置换的功能! ($ 可保留相关功能)|
| `` |两个『 ` 』中间为可以先执行的指令,亦可使用 $( )|
| () |在中间为子 shell 的起始与结束|
| {} |在中间为命令区块的组合!|

标准输入输出
0 标准输入 < <<
1 标准输出 > >>
2 标准错误输出 2> 2>>

find /home -name .bashrc > list_right 2> list_error 

/dev/null 垃圾桶黑洞装置与特殊写法
可以将错误信息丢到黑洞不予理会
2>&1 将错误输出与输出放置同一个文件,需要采用特殊写法

> 表示覆盖式输出,>> 表示追加是输出、
> <表示从文件读取代替键盘输入。而<<则很难理解了,表示结束的输入字符。
> 如:<< "eof" 则表示遇到eof则终止输入。

命令执行的判断依据: ; , &&, ||
cmd ; cmd (不考虑指令相关性的连续指令下达)
$? (指令回传值) 与 && 或 || 逻辑判断符,根据命令回传值决定执行那些命令,是一个相当好玩的指令

管线命令 (pipe)

• 管线命令仅会处理 standard output,对于 standard error output 会予以忽略
• 管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。
简单来说就是管线命令前要有标准输出的产生,命令后要能接受标准输入。

管线命令后支持的命令大概有以下:
cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand, split, xargs

cut 主要的用途在于将『同一行里面的数据进行分解!』

# 试下这些命令你就知道什么意思了哦
export | cut -c 12-
# last 可以输出『账号/终端机/来源/日期时间』的数据,并且是排列整齐的
last | cut -d ' ' -f 1

grep 全文搜索 很好用的命令,多用就知道了!

grep [-acinv] [--color=auto] '搜寻字符串' filename
-a  将binary文件以text文件的方式搜寻数据
-c  计算找到'搜寻字符串'的次数
-i  忽略大小写的不同 
-n  顺便输出行号
-v  反向选择,即显示没有'搜寻字符串'内容的文本
--color=auto    可以将找到的关键词部分加上颜色的显示

sort 排序

sort [-fbMnrtuk] [file or stdin]
-f 忽略大小写
-b 忽略最前面的空白字符
-M 按月份的名字排序
-n 按照数字进行排序
-r 反向排序
-t 分隔符,预设是用 [tab] 键来分隔;
-u unique 相同的数据只展示一条
-k 以那个区间 (field) 来进行排序的意思

uniq

uniq [-ic]
-i 忽略大小写
-c 计数
# 统计最近登录的用户次数
last | cut -d ' ' -f1 | sort | uniq -c

wc

wc [-lwm]
-l 仅列出行
-w  仅列出多少字
-m  多少字符
# 取得登入系统的总人次
last | grep [a-zA-Z] | grep -v 'wtmp' | grep -v 'reboot' | grep -v 'unknown' |wc -l
#由于 last 会输出空白行, wtmp, unknown, reboot 等无关账号登入的信息,因此,我利用 # grep 取出非空白行,以及去除上述关键词那几行,再计算行数

tee双向重导向
tee 可以让 standard output 转存一份到文件内并将同样的数据继续送到屏幕去处理! 这样除了可以 让我们同时分析一份数据并记录下来之外,还可以作为处理一份数据的中间暂存盘记录之用。

tee [-a] file
-a  以append的方式,将数据加入file中

tr 可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换

tr [-ds] SET1 ...
-d  删除讯息中SET1的字符串
-s  取代掉重复的字符
# 将last的输出中小写变大写
last | tr '[a-z]' '[A-Z]'
#经常用来替换文件中奇怪的符号。

col

col [-xb]
-x: 将tab键转换成对等的空格键
#利用 cat -A 显示出所有特殊按键,最后以 col 将 [tab] 转成空白
cat /etc/man_db.conf | col -x | cat -A | more

join 处理相关联数据的好帮手

join [-ti12] file1 file2
-t join 默认以空格符分隔数据,并且比对『第一个字段』的数据,
如果两个文件相同,则将两笔数据联成一行,且第一个字段放在第一个
-i  忽略大小写
-1  第一个文件要用哪个字段
-2  第二个文件要用哪个字段

join -t ':' -1 4 /etc/passwd -2 3 /etc/group | head -n 3
# 使用join之前需要实现排序处理哦

paste 直接贴在一起,以[tab]键隔开

paste [-d] file1 file2
-d  默认的分隔符是tab 可指定
-   如果file部分写成-,表示来自 standard input 的资料的意思

expand 将tab转成空格

 expand [-t] file
 -t     后面可以接数字。一般来说,一个 tab 按键可以用 8 个空格键取代。
我们也可以自行定义一个 [tab] 按键代表多少个字符呢
#unexpand 将空格转成tab

split

split [-bl] file PREFIX
-b :后面可接欲分区成的文件大小,可加单位,例如 b, k, m 等; 
-l :以行数来进行分区。
PREFIX :代表前导符的意思,可作为分区文件的前导文字。
# 切割文件
cd /tmp; split -b 300k /etc/services services
# 复原为一个文件
cat services* >> servicesback

xargs

xargs [-0epn] command
-0 :如果输入的 stdin 含有特殊字符,例如 `, \, 空格键等等字符时,这个 -0 参数
可以将他还原成一般字符。这个参数可以用于特殊状态喔!
-e :这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs 分析到这个字符串时,
就会停止继续工作!
-p :在执行每个指令的 argument 时,都会询问使用者的意思;
-n :后面接次数,每次 command 指令执行时,要使用几个参数的意思。 当 xargs 后面没有接任何的指令时,默认是以 echo 来进行输出喔!

# 很多指令其实并不支持管 线命令,因此我们可以透过 xargs 来提供该指令引用 standard input 之用

关于减号 - 的用途

tar -cvf - /home | tar -xvf - -C /tmp/homeback
# 我将 /home 里面的文件给他打包,但打包的数据不是纪录到文件,而是传送到 stdout; 经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf - 』。后面的这个 - 则是取用前 一个指令的 stdout, 因此,我们就不需要使用 filename 了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353