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

相关推荐

  • 第十周

    请详细描述CentOS的启动流程     启动第一步–加载BIOS         当打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它,这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信…

    Linux干货 2017-01-03
  • 第三周作业

      1. 列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d' ' -f1 | sort -u root 2. 取出最后登录到当前系统的用户的相关信息。 [root@localhost ~]# who | tail -1 roo…

    Linux干货 2016-12-26
  • RAID磁盘列阵

                            RAID   RAID是英文Redundant Array o…

    Linux干货 2016-09-07
  • Linux基础小模块

    1.基础知识小块:shell 由shell程序的自带命令:即为内置命令(builtin) 独立的可执行程序文件、文件名 :即为外部命令  [root@localhost~]#ls      ~用户当前所在目录  #:命令提示符(管理员帐号root)  $:普通用户   &nbsp…

    Linux干货 2016-08-05
  • Linux的简介

    Linux的简介 冯诺依曼体系结构 主要特点:使用存储器,采用二进制(据说,采用二进制的灵感来源于中国的八卦,2变4,4变8…) 体系介绍:其由几大部分组成,输入设备,运算器,控制器,内部存储器,外部存储器,输出设备。 目前,输入设备就是指键盘鼠标, 运算器和控制器现在统称CPU。其实已经内置了两个功能。 内部存储器就是内存,某种意义上,缓存也算…

    Linux干货 2016-10-28
  • LVM逻辑卷管理器

    Logical Volume Manager     LVM(逻辑卷管理)是Linux环境下对磁盘分区进行管理的一种机制。     普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,     某个分区空间耗尽时,解决的方法通常是使…

    Linux干货 2016-08-29