shell脚本总结

shell进阶:
列表生成方式:
列表生成方式:
(1) 直接给出列表 
以空白为间隔
(2) 整数列表:
(a) {start..end}
(b) $(seq [start [step]] end)
(3) 返回列表的命令
$(COMMAND)
(4) 使用glob,
如:.sh
(5) 变量引用;
$@, $

while read line(用法)(用于遍历文件,进行处理)
代码段:#!/bin/bash
while read line;do
        var1=echo $line | cut -d ":" -f5
        var2=echo $line | cut -d ":" -f1
        [[ -z $var1 ]] && chfn -o 13760224840$var2 $var2
done </etc/passwd
代码解释:line可以为任意变量,从/etc/passwd中一次读取一行文件,用来修改/etc/passwd中的office字段
select 用法)(经常结合case使用) 
代码段

!/bin/bash

PS3=”please input your answer: “
select var in “A” “B” “C” “D”
do
echo “your input is $REPLY”($REPLY是系统内置变量)

if [[ -n $var ]];then
echo “your answer is $var”
break
else
echo “your selection is invalid”
fi
done
信号捕捉trap
 trap ‘触发指令’ 信号自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作
 trap ” 信号 忽略信号的操作
 trap ‘-‘ 信号 恢复原信号的操作
 trap -p 列出自定义信号操作
函数:
函数的定义放在特定文件中,用.路径进行调用
函数返回值return和exit return退出函数,exit退出脚本
return 从函数中返回,用最
return 0 无错误返回。
return 1-255 有错误返回

函数可以接受参数:
传递参数给函数:调用函数时,在函数名后面以空白分隔
给定参数列表即可;例如“testfunc arg1 arg2 …”
可以使用$@, $*, $#等特殊变量
变量作用域:
环境变量:当前shell和子shell有效
本地变量:只在当前shell进程有效,为执行脚本会启动
专用子shell进程;因此,本地变量的作用范围是当前shell脚本程序文件,包括脚本中的函数
局部变量:函数的生命周期;函数结束时变量被自动销毁
 注意:如果函数中有局部变量,如果其名称同本地变量,使用局部变量
 在函数中定义局部变量的方法
local NAME=VALUE
数组:
数值索引(数值格式)和关联索引(自定义格式)
数组声明:
declare -a ARRAY_NAME
declare -A ARRAY_NAME: 关联数组
数组赋值:
1)一次只赋值一个元素;ARRAY_NAME[INDEX]=VALUE
2)一次赋值全部元素:ARRAY_NAME=(“VAL1” “VAL2” “VAL3” …)
3)只赋值特定元素:ARRAY_NAME=([0]=”VAL1″ [3]=”VAL2″ …)
4)交互式数组值对赋值read -a ARRAY
数组引用:
1)引用数组元素: ${ARRAY_NAME[INDEX]}注意:省略[INDEX]表示引用下标为0的元素
2)数组的长度(数组中元素的个数):${#ARRAY_NAME[]}${#ARRAY_NAME[@]}
3)引用数组所有元素${ARRAY_NAME[@]}
数组处理:
1)数组切片: ${ARRAY[@]:offset:number}
offset: 要跳过的元素个数 number: 要取出的元素个数
取偏移量之后的所有元素:${ARRAY[@]:offset}
2)向数组中追加元素:ARRAY[${#ARRAY[
]}]
3)删除数组中的某元素:导致稀疏格式:unset ARRAY[INDEX] 删除整个数组: unset ARRAY
字符串:
${expression}一共有9种使用方法。
${parameter:-word}
${parameter:=word}
${parameter:?word}
${parameter:+word} 
上面4种可以用来进行缺省值的替换。
${#parameter}
上面这种可以获得字符串的长度。 
${parameter%word} 最小限度从后面截取word
${parameter%%word} 最大限度从后面截取word
${parameter#word} 最小限度从前面截取word
${parameter##word} 最大限度从前面截取word
上面4个就是用来截取字符串的方法了。
有了着四种用法就不必使用cut命令来截取字符串了
第一种又可以分为四种情况,下面一一介绍。

1、使用 # 号操作符。用途是从左边开始删除第一次出现子字符串即其左边字符,保留右边字符。用法为#substr,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str#
//}
得到的结果为www.你的域名.com/cut-string.html,即删除从左边开始到第一个”//”及其左边所有字符
2、使用 ## 号操作符。用途是从左边开始删除最后一次出现子字符串即其左边字符,保留右边字符。用法为##substr,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str##
/}
得到的结果为cut-string.html,即删除最后出现的”/”及其左边所有字符
3、使用 % 号操作符。用途是从右边开始删除第一次出现子字符串即其右边字符,保留左边字符。用法为%substr,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str%/
}
得到的结果为http://www.你的域名.com,即删除从右边开始到第一个”/”及其右边所有字符
4、使用 %% 号操作符。用途是从右边开始删除最后一次出现子字符串即其右边字符,保留左边字符。用法为%%substr,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str%%/
}
得到的结果为http://www.你的域名.com,即删除从右边开始到最后一个”/”及其右边所有字符

字符串处理2,分别介绍如下:
1、从左边第几个字符开始以及字符的个数,用法为:start:len,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
2、从左边第几个字符开始一直到结束,用法为:start,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${var:7}
其中的 7 表示左边第8个字符开始
结果是:www.你的域名.com/cut-string.html
3、从右边第几个字符开始以及字符的个数,用法:0-start:len,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str:0-15:10}
其中的 0-6 表示右边算起第6个字符开始,10 表示字符的个数。
结果是:cut-string
3、从右边第几个字符开始一直到结束,用法:0-start,例如:
str=’http://www.你的域名.com/cut-string.html’
echo ${str:0-4}
其中的 0-6 表示右边算起第6个字符开始,10 表示字符的个数。
结果是:html
注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
字符串替换:
${var/pattern/substr}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之
${var//pattern/substr}: 查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之
${var/#pattern/substr}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
${var/%pattern/substr}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之
查找并删除
${var/pattern}:查找var所表示的字符串中,删除第一次被pattern所匹配到的字符串
${var//pattern}:所有${var/#pattern}:行首
${var/%pattern}:行尾
字符大小写转换
${var^^}:把var中的所有小写字母转换为大写
${var,,}:把var中的所有大写字母转换为小写
创建临时文件
mktemp命令:创建并显示临时文件,可避免冲突
 mktemp [OPTION]… [TEMPLATE]
TEMPLATE: filename.XXX
X至少要出现三个
 OPTION:
-d: 创建临时目录
-p DIR或–tmpdir=DIR:指明临时文件所存放目录位置
 示例:

mktemp /tmp/test.XXX

tmpdir=mktemp –d /tmp/testdir.XXX

mktemp –tmpdir=/testdir test.XXXXXX

安装复制文件install(与cp的区别是可以改变文件的权限)
install命令:
install [OPTION]… [-T] SOURCE DEST 单文件
install [OPTION]… SOURCE… DIRECTORY
install [OPTION]… -t DIRECTORY SOURCE…
install [OPTION]… -d DIRECTORY…创建空目录
 选项:
-m MODE,默认755
-o OWNER
-g GROUP
 示例:
install -m 700 -o wang -g admins srcfile desfile
install –m –d /testdir/installdir

原创文章,作者:919022966,如若转载,请注明出处:http://www.178linux.com/79688

(2)
919022966919022966
上一篇 2017-07-09
下一篇 2017-07-10

相关推荐

  • ipvsadm用法

    ipvsadm命令的用法:      1.用于管理Lvs集群服务      2.用于进行RS的增删改      3.查看配置  lvs服务器架设步骤:  1.判断内核是否支持ipvs(看到CONFIG_NETFIFLER_XT_MATCH_IPVS=…

    Linux干货 2017-01-10
  • Liunx获取信息帮助与man文档章节的划分

    首先要判断命令的类型,可用 type COMMAND 来判断命令 如果显示结果为(….是 shell内嵌)即为shell内嵌命令,如需获取帮助,使用 help COMMAND 即可; 下图的例子是pwd是shell内嵌命令 内部命令属于Shell的一部分,所以并没有单独对应的系统文件,只要Shell解释器被运行,内部指…

    2017-07-02
  • linux学习第三天

            Linux学习第三天 Bash特性及文件系统介绍 cat /etc/shells cat命令进入/etc/shells/下面查看有几种shell FHS (文件系统遵循FHS定义)     /bin  供所有用户使用基本的用户命令程序文件   …

    Linux干货 2016-10-18
  • linux基础知识

    基本命令,man自助使用手册,linux文件目录。

    Linux干货 2017-12-11
  • rpm和yum的使用,程序包编译安装以及编译apache过程中出现的问题

    一、rpm包管理          用法: rpm [选项…]              查询/验证软件包选项:   &nbsp…

    Linux干货 2016-03-19
  • linux进程管理

    进程概念 内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、 安全功能等 Process:  运行中的程序的一个 副本,是被 载入内存的一个指令集合     进程ID (Process ID,PID)号码被用来标记各个进程  &…

    Linux干货 2016-09-12