Shell

shell的变量功能

1.变量的配置守则
  1. 若该变量需要在其它子程序运行,则需要用export使变量成为环境变量环境变量
    export name=Tom
    在其它子程序中会使用到该变量的值
  2. 取消变量的方法为unset
  3. 变量的配置当中,单引号与双引号的用途有何不同?
    双引号中仍然可以保留变量的内容,单引号仅能是一般字符
    name=TOM
    myname=“He is ${name}”
    myname=‘He is ${name}’
  4. ``的意义
    在一串命令中, `中的命令将先被运行,其运行出来的结果将作为外部的输入信息
  5. read:用来读取用户的输入
read atest
Tom    <=此时光标等待输入
echo $atest

输出 Tom

  1. 变量的类型 declare/typeset
    declare [-aixr] var
    选项与参数: -a则将var定义成数组(array)
    -i 定义成整数数字(integer)
    -x 用法与export一样,将var定义成环境变量
    -r 将var定义成readonly
declare -x sum     #让sum变为环境变量
export | grep sum  #输出450
declare +x sum   #让sum变为非环境变量的自定义变量
declare -p sum   #列出sum的类型;  

定义数组

score_arr[1]="97"    #数组的名称为score_arr
score_arr[2]="71"
echo $score_arr[2]
命令别名和历史命令
  1. 命令别名配置 alias, unalias
alias lm='ls -al | more'

取消

unalias lm
  1. 历史命令: history
    查看历史命令
history      #列出所有历史命令
history 10  #列出最近10个历史命令
history  -c 将历史命令全部清除
配置文件
  1. ~/.bash_priofile (login shell才会读)
    bash在读完整体的环境配置,再读个人配置,会按照下列次序,如果命中一个,则后面的就不会读,次序如下:
~/.bash_profile
~/.bash_login
~/.profile
  1. source 读入环境配置文件的命令
    source或.都可以将配置文件的内容读入到目前的环境中
  2. ~/.bashrc (non-login shell才会读)
    ~/.bashrc: 在non-login shell这种非登陆情况取得 bash 操作接口的环境配置文件
  3. 快捷键
ctrl +c终止目前的命令
ctrl + z暂停目前的命令
ctrl + s暂停屏幕的输出
ctrl + q恢复屏幕的输出
通配符及特殊符号
  1. 通配符
    bash中常用的通配符如下:
*从0个到无穷个的任意字符
?一定有一个字符,
[]一定有一个在括号内
-在某一范围内
^反向选择

例如:
ls ./???,列出文件名长度为5的文件
ls ./*[0-9]*, 列出文件名包含数字的文件
ls ./[^a-z]*, 列出开头非小写字母的文件
2. 特殊符号

#注释符号
\将通配符或特殊符号还原成一般符号
|管线
;连续命令的分隔符
~用户的根目录
&工作控制(job control):将命令变成背景下的工作
!逻辑非
>,>>数据流重导向,输出导向,取代,累加
<,<<输入导向
‘’单引号:不具备置换功能
“”具有置换功能
``可以先运行的命令
()子shell的起始与结束
数据流重导向
  1. standard output 与 standard error output
标准输入(stdin)代码为 0,使用 < 或 <<
标准输出(stdout)代码为 1 ,使用 > 或 >>
标准错误输出(stderr)代码为 2 ,使用 2> 或 2>>
  1. standard input : < 与 <<
    将原本需要由文件输入的内容改为文件内容取代
命令运行的判断依据

很多命令我想一次性输入完成,不想分次运行,有下面两种情况

  1. cmd;cmd 命令之间没有相关性
  2. $?(命令回传值)与&&或||
    若前一个命令正确,则$?=0
    cmd1&&cmd2: 若 cmd1 运行完毕且正确运行($?=0),则开始运行 cmd2;若 cmd1 运行完毕且为错误 ($?≠0),则 cmd2 不运行。
    cmd1 || cmd2: 若 cmd1 运行完毕且正确运行($?=0),则 cmd2 不运行;若 cmd1 运行完毕且为错误 ($?≠0),则开始运行 cmd2。
管线命令
  1. 什么是管线命令?
    a.管线命令仅会处理 standard output,对于 standard error output 会予以忽略
    b.管线命令必须要能够接受来自前一个命令的数据成为 standard input 继续处理才行。
  2. 截取命令: cut, grep
    1. cut:以行为单位,把信息给切出来
    cut -d'分隔字符' -f fields <==用于有特定分隔字符
    cut -c 字符区间            <==用于排列整齐的信息
    选项与参数:
    -d  :后面接分隔字符。与 -f 一起使用;
    -f  :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
    -c  :以字符 (characters) 的单位取出固定字符区间;
    
    范例一:将 PATH 变量取出,我要找出第五个路径
    [root@www ~]# echo $PATH
    /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games:
    \# 1 |    2   |  3  |    4    |       5      |     6        |    7
    [root@www ~]# echo $PATH | cut -d ':' -f 5
    \# 如同上面的数字显示,我们是以『 : 』作为分隔,因此会出现 /usr/local/bin 
    
    # 那么如果想要列出第 3 与第 5 呢?,就是这样:
    [root@www ~]# echo $PATH | cut -d ':' -f 3,5
    
    范例二:将 export 输出的信息,取得第 12 字符以后的所有字符串
    [root@www ~]# export
    declare -x HISTSIZE=“1000”
    declare -x INPUTRC="/etc/inputrc"
    declare -x KDEDIR="/usr"
    declare -x LANG=“zh_TW.big5”
    …(其他省略)…
    # 注意看,每个数据都是排列整齐的输出!如果我们不想要『 declare -x 』时,
    # 就得这么做:
[root@www ~]# export | cut -c 12-
HISTSIZE="1000"
INPUTRC="/etc/inputrc"
KDEDIR="/usr"
LANG="zh_TW.big5"

# 我们还可以指定某个范围的值,例如第 12-20 的字符,就是 cut -c 12-20 等等!

范例三:用 last 将显示的登陆者的信息中,仅留下用户大名
[root@www ~]# last
root pts/1 192.168.201.101 Sat Feb 7 12:35 still logged in
root pts/1 192.168.201.101 Fri Feb 6 12:13 - 18:46 (06:33)
root pts/1 192.168.201.254 Thu Feb 5 22:37 - 23:53 (01:16)
# last 可以输出『账号/终端机/来源/日期时间』的数据,并且是排列整齐的

[root@www ~]# last | cut -d ' ' -f 1
# 由输出的结果我们可以发现第一个空白分隔的字段代表账号,所以使用如上命令:
  1. grep
    选项与参数:
    -a :将 binary 文件以 text 文件的方式搜寻数据
    -c :计算找到 ‘搜寻字符串’ 的次数
    -i :忽略大小写的不同,所以大小写视为相同
    -n :顺便输出行号
    -v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行!
    –color=auto :可以将找到的关键词部分加上颜色的显示喔!

范例一:将 last 当中,有出现 root 的那一行就取出来;

[root@www ~]# last | grep 'root'

范例二:与范例一相反,只要没有 root 的就取出!

[root@www ~]# last | grep -v 'root'

范例三:在 last 的输出信息中,只要有 root 就取出,并且仅取第一栏

[root@www ~]# last | grep 'root' |cut -d ' ' -f1
# 在取出 root 之后,利用上个命令 cut 的处理,就能够仅取得第一栏啰!

范例四:取出 /etc/man.config 内含 MANPATH 的那几行

[root@www ~]# grep --color=auto 'MANPATH' /etc/man.config
....(前面省略)....
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man
MANPATH_MAP     /usr/bin/mh             /usr/share/man
# 神奇的是,如果加上 --color=auto 的选项,找到的关键词部分会用特殊颜色显示喔!
  1. 排序命令: sort, wc, uniq
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值