美文网首页
BASH入门

BASH入门

作者: Jocelyn_Long | 来源:发表于2017-12-04 19:20 被阅读6次
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 了

相关文章

  • bash入门

    1、设计一个shell脚本,在/userdata目录下建立10个目录,即user1~user50,并设置每个目录的...

  • BASH入门

    1.变量定义 变量=变量内容 如myName=Jocelyn知识点如下: 等号连边不能有空格 变量只能以英文开头,...

  • bash入门

    Bourne-Again SHell; Born Again SHell Introduction 写作“入门”,...

  • git 命令

    bash入门(了解) bash是许多linux系统默认的shell(命令行工具)。 cmd和powershell是...

  • Zsh 入门和介绍

    Zsh 入门和介绍 Zsh 兼容 Bash,据传说 99% 的 Bash 操作 和 Zsh 是相同的 Zsh 官网...

  • Bash脚本编程(2)——编程入门

    @(Bash)[编程入门] 1. Bash中的变量 1.1 变量类型 字符型 数值型 整型 浮点型 语言类型: 强...

  • Bash 入门(搬运)

    声明:内容系搬运自他人文章和自己整理不是完整教程,只是用到的几个点的记录好坏请自己甄别 参考文章和相关教程 [1]...

  • Bash入门笔记

    本猫工作之前除了基本的cd, ls, cat, less之外,基本上没见过bash。于是开始工作之后果断跪了,当了...

  • 20170805bash学习

    bash学习 参考 Linux bash总结(一) 基础部分(适合初学者学习和非初学者参考)Linux 入门公开课...

  • 1. 在windows环境下安装nodejs

    1)下载nodejs入门级操作工具--git bash git bash:百度搜索即可搜到哦~ link:http...

网友评论

      本文标题:BASH入门

      本文链接:https://www.haomeiwen.com/subject/wqnxixtx.html