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

相关推荐

  • 用户和组命令及相关配置文件总结

    用户和组相关的配置文件 目录 一、创建用户、组和权限相关命令… 1 1、useradd 帐号建立… 1 2、usermod 用户属性更改… 2 3、Passwd. 2 4、userdel 2 6、chfn. 3 7、Chsh. 3 8、finger. 3 9、groupadd. 3 10、Groupdel 3 11、gro…

    Linux干货 2016-10-24
  • 双主模型的Nginx高可用负载均衡集群

    实验目的:使用keepalived实现Nginx的双主高可用负载均衡集群 实验环境:两台Nginx proxy(双主Nginx,各需要两块网卡,eth0连接内网,eth1连接外网)、两台web server(请求的负载均衡)、一台client用于验证结果。 注意:为了不影响实验结果,在实验开始前先关闭iptables和selinux 操作步骤: 一、配置IP…

    2017-05-13
  • Linux运维基础

    正则表达式

    Linux干货 2018-03-19
  • 马哥教育网络班22期+第2周课程练习

    1.linux上的文件管理类命令有哪些,其常用的使用方法及其相关示例演示    cp  复制文件  :单源;多源(目标必须是目录)        cp  /etc/fstab /tmp/hi.txt     -i 覆盖之前提醒用户确认   …

    Linux干货 2016-08-21
  • http

    练习:分别使用CentOS 7和CentOS 6实现以下任务 一、配置三个基于名称的虚拟主机          (a) discuzX          (b) wordpress  &nb…

    Linux干货 2016-10-09