Linux Shell脚本

变量设定规则
变量与内容以一个等号【=】连结,并且等号两边不能有空格。例如name=wang
变量内容若有空格符可使用双引号或者单引号。但是双引号内容 特殊字符如$等,可以保有原本的特性。例如var=“lang is $LANG”,输出lang is en_US;如果是单引号内的特殊字符则仅为一般字符(纯文本)例如:var="lang is $LANG",输出lang is $LANG
可用跳脱字符【\】将特殊符号(如[Enter] ,$ ,\空格等)变成一般字符
在一串指令中,还需要有其他指令提供的信息可以用$(指令)。例如:version=$(uname -r)
若该变量为扩增变量内容时,则可用“$变量名称”或${变量名称}累加,并且后接冒号【:】。例如path=${path}:/home
若该变量需要在其他子程序执行,则需要以export来使变量变成环境变量。例如export path
取消变量的方式使用unset 变量名称

env、set、export区别
env命令可以显示当前用户的环境变量,还可以用来在指定环境变量下执行其他命令。下面来比较一下set,env和export命令的异同:set命令显示当前shell的变量,包括当前用户的变量;env命令显示当前用户的变量;export命令显示当前导出成用户变量的shell变量。每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如HOME,SHELL等这些变量,但shell自己的变量不同shell是不同的,比如BASH_ARGC,BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export “导出”变成一个用户变量。

变量键盘读取、数组与声明
read:从键盘中读取信息:
语法read [-pt] 变量名称
选项与参数:
-p:后面可以接提示字符
-t:后面可以接等待的时间(秒为单位)
declare:声明变量
语法:declare[-aixr] 变量名称
选项与参数:
-a:将后面的【变量】定义为数组array类型
-i:将后面的【变量】定义为整数数字类型
-x:用法 与export一样,就是将后面的变量变成环境变量
-r:将变量设定为readonly类型,该变量不可变更改

bash环境信息
bash的进站信息:/etc/issue
bash登录以后信息:/etc/motd
bash环境配置文件
login shell:取得bash时需要完整的登入流程
no-login shell:取得bash接口的方法不需要重复登入
login shell需要读取的文件
/etc/profile:这个是系统整体设定,最好不要修改
~/.bash_profile, ~/.bash_login, ~/.profile:属于使用者个人设定。
注意:bash读完整体环境设定/etc/profile并且呼叫其他配置文件,接下来依次都读取个人配置文件,顺序如上,但是只会读取其中一个文件。如果~/.bash_profile存在就,不读取其他文件
no-login shell需要读取的文件
只读取~/.bash_profile
login-out shell需要读取的文件
读取~/.bash_logout

source:读取环境配置文件:语法:source 配置文件名称

管线应用
数据流应用
默认>代表1>;>>代表2>>
  • 1>:以覆盖的方法将正确的数据输出到指定的文档或装置;
  • 1>>:以累加的方法将正确的数据输出到指定的文档或装置;
  • 2>:以覆盖的方法将错误的数据输出到指定的文档或装置
  • 2>>:以累加的方法将错误的数据输出到指定的文档或装置
例如:find /home -name .bashrc>right 2>error
例如:find /home -name .bashrc>right 2>/dev/null
注意:/dev/null垃圾筒,即将信息忽略掉,不显示存储
&&与||应用
命令1 && 命令2:
若命令1执行完毕且正确,则开始执行命令2
若命令2执行完毕且错误,则命令2不执行
命令1 || 命令2:
若命令1执行完毕且正确执行,则命令2不执行
若命令1执行完毕且错误,则开始执行命令2
管道命令
cut:切出某段信息:
语法:cut -d “分隔字符” -f 数字【cut -c 字符区间即从第几个字符开始到第几个结束】
选项与参数:
-d:后面接分隔字符。与-f 一起使用
-f:依据-d的分隔字符将一段信息分割成数段,用-f取出第几段
-c:以字符为单位取出固定字符区间
例如:
[QQ@localhost ~]$ ls -l|cut -c 3-
[QQ@localhost ~]$ ls -l|cut -d " " -f 1

grep:分析信息,若如果是需要的信息,就输出来
语法:grep [-acinv] [--color=auto] "搜索的字符串" 文件名称
-a:将binary文档以text文档方式搜索
-c:计算找搜索字符串的 次数
-i:忽略大小写
-n:顺便输出行号
--color=auto:可以将找到关键词部分加上颜色显示

sort排序
语法:sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f:忽略大小写的差异
-b:忽略最前面空格符部分
-M:以月份的名字来排序
-n:使用纯数字进行排序,默认是以文字型态来排序的
-r:反向排序
-u:相同的数据中,仅出现一行代表;
-t:分隔符,预设是用[tab]分隔
-k:以那个区间(field)来进行排序的意思
例如[QQ@localhost ~]$ ls / |sort -t " " -k 3

tee双向重导向
语法:tee [-a] 文件名
选项与参数:
-a:以累加方式,将数据加入file文件
例如:ls / |sort -t " " -k 3|tee QQ

sed工具
语法:sed [-nefr] [动作]
选项与参数:
-n:只有经过sed处理过的哪一行或者动作才会被列出来
-e:直接在指令列模式上进行sed的动作 处理
-f:将sed的动作写在一个文件内,-f 【文件名称】 则可以执行【文件名称】内的ssed动作
-i:直接修改读取的文档内容,而不是由屏幕输出
【n1 】【n2 】动作参数
a:新增,a后面可以接字符串,而这些字符串会在新的一行出现
c:取代,c的后面可以接字符串可以取代n1,n2之间的行
d:删除,
i:插入
p:打印
s:取代,可以直接进行取代工作,通常可以搭配正则表达式例如1,20s/old/new/g
例如把查询出来的内容替换
[root@localhost home]# ls / | sed "s/DD/QQ/g"
例如直接往文件中添加“QQQ”内容
[root@localhost home]# sed -i '1a QQQ' test.txt























































你可能感兴趣的:(Linux Shell脚本)