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

相关推荐

  • 幽默:程序员的进化

    高中时期 view plaincopy to clipboardprint? 10 PRINT "HELLO WORLD"   20 END 大学新生 view plaincopy to clipboardprint? …

    Linux干货 2016-05-17
  • day6作业

    1、创建用户gentoo,附加组为bin和root,默认shell为 /bin/csh,注释信息为"Gentoo Distribution"     2、创建下面的用户、组和组成员关系 名字为admins 的组 用户natasha,使用admins …

    系统运维 2016-08-08
  • httpd-2.4 功能生动实现 (Blog 13)

    CentOS 7 与 CentOS 6 访问控制区别、虚拟主机

    2017-12-01
  • 正则表达式

    什么是正则表达式? 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,许多程序设计语言都支持利用正则表达式进行字符串操作。正则表达式是烦琐的,但它是强大的,学会之后的应用会让你除…

    Linux干货 2017-06-01
  • Python线程指南

    本文介绍了Python对于线程的支持,包括“学会”多线程编程需要掌握的基础以及Python两个线程标准库的完整介绍及使用示例。 注意:本文基于Python2.4完成,;如果看到不明白的词汇请记得百度谷歌或维基,whatever。 尊重作者的劳动,转载请注明作者及原文地址 >.< 1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如…

    2015-03-13
  • HAproxy实战

    HAproxy实验一 1、实验要求: (1) 动静分离discuzx,动静都要基于负载均衡实现; (2) 进一步测试在haproxy和后端主机之间添加varnish缓存(见实验二步骤); (3) 给出拓扑设计; (4) haproxy的设定要求: (a) 启动stats; (b) 自定义403、502和503的错误页; (c) 各组后端主机选择合适的调度方法…

    Linux干货 2016-11-15