加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Shell 编程

发布时间:2020-12-15 21:28:16 所属栏目:安全 来源:网络整理
导读:函数 函数表达法? function_name 中间下划线隔开 函数只在当前终端生效 调用函数应声明函数 如图:func2未声明无法生效 理念:函数名和调用函数分离 ? ? ? ? 函数名文件 ?action函数的应用 declare -f function_name 声明函数 ? 显示删根成功 不是针对删除

函数

函数表达法?

function_name 中间下划线隔开

函数只在当前终端生效

调用函数应声明函数 如图:func2未声明无法生效

理念:函数名和调用函数分离

?

?

?

?

函数名文件

?action函数的应用

declare -f function_name 声明函数

?

显示删根成功 不是针对删除

信号捕捉

trap ‘触发指令‘ 信号
进程收到系统发出的指定信号后,将执行自定义指令,而不会执行原操作

?ctrl c 会取消原命令

trap finish EXIT
当脚本退出时,执行finish函数

数组

变量:存储单个元素的内存空间
数组:存储多个元素的连续的内存空间,相当于多个变量的集合
?
数组名和索引
索引(下标):编号从0开始,属于数值索引?
注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,
bash4.0版本之后开始支持
bash的数组支持稀疏格式(索引不连续)?
?
声明数组:
declare -a ARRAY_NAME
declare -A ARRAY_NAME 关联数组
注意:两者不可相互转换
?
数组元素的赋值格式:
(1) 一次只赋值一个元素
ARRAY_NAME[INDEX]=VALUE
weekdays[0]="Sunday"
weekdays[4]="Thursday"
?
(2) 一次赋值全部元素
ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
?
(3) 只赋值特定元素
ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)? ?(稀疏格式)
?
(4) 交互式数组值对赋值
read -a ARRAY
显示所有数组:declare -a?
?
?
引用数组元素
${ARRAY_NAME[INDEX]}
注意:省略[INDEX]表示引用下标为0的元素
?引用数组所有元素
${ARRAY_NAME[*]}
${ARRAY_NAME[@]}
?数组的长度(数组中元素的个数)
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}
?删除数组中的某元素:导致稀疏格式
unset ARRAY[INDEX]
?删除整个数组
unset ARRAY
?

?

?

?

不写下标默认为0

?

?

稀疏格式内 个数+1不等于最大下标

read

  • -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。

关联数组应先声明

?

?

?

?

引用数组中的元素: (必须是数值数组)
数组切片:
${ARRAY[@]:offset:number}
offset 要跳过的元素个数
number 要取出的元素个数
取偏移量之后的所有元素
${ARRAY[@]:offset}?

?

?

?

?

字符串切片
${#var}:返回字符串变量var的长度
? ${var:offset}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字
符开始,到最后的部分,offset的取值在0 到 ${#var}-1 之间(bash4.2后,允许为负值)
? ${var:offset:number}:返回字符串变量var中从第offset个字符后(不包括第offset个
字符)的字符开始,长度为number的部分
? ${var: -length}:取字符串的最右侧几个字符
注意:冒号后必须有一空白字符
? ${var:offset:-length}:从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字
符之前的内容
? ${var: -length:-offset}:先从最右侧向左取到length个字符开始,再向右取到距离最
右侧offset个字符之间的内容? ? (centos6 不支持)
注意:-length前空格

?

?

基于模式取子串
${var#*word}:其中word可以是指定的任意字符
功能:自左而右,查找var变量所存储的字符串中,第一次出现的word,删
除字符串开头至第一次出现word字符串(含)之间的所有字符
${var##*word}:同上,贪婪模式,不同的是,删除的是字符串开头至最后
一次由word指定的字符之间的所有内容
?示例:
file=“var/log/messages”
${file#*/}: log/messages
${file##*/}: messages
?

?

?

高级变量用法-有类型变量
?Shell变量一般是无类型的,但是bash Shell提供了declare和typeset两个命令 用于指定变量的类型,两个命令是等价的 ?
declare [选项] 变量名
-r 声明或显示只读变量
-i 将变量定义为整型数
-a 将变量定义为数组
-A 将变量定义为关联数组
-f 显示已定义的所有函数名及其内容
-F 仅显示已定义的所有函数名
-x 声明或显示环境变量和函数
-l 声明变量为小写字母 declare –l var=UPPER
-u 声明变量为大写字母 declare –u var=lower

?

eval命令
?eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令
适用于那些一次扫描无法实现其功能的变量.该命令对变量进行两次扫描
?示例:
[ [email?protected] ~]# CMD=whoami
[ [email?protected] ~]# echo $CMD
whoami
[ [email?protected] ~]# eval $CMD
root
[ [email?protected] ~]# n=10
[ [email?protected] ~]# echo {0..$n}
{0..10}
[ [email?protected] ~]# eval echo {0..$n}
0 1 2 3 4 5 6 7 8 9 10
?例子:

?

?

创建临时文件
?mktemp命令:创建并显示临时文件,可避免冲突
?mktemp [OPTION]... [TEMPLATE]
TEMPLATE: filenameXXX
X至少要出现三个
?OPTION:
-d: 创建临时目录
-p DIR或--tmpdir=DIR:指明临时文件所存放目录位置
?示例:
mktemp /tmp/testXXX
tmpdir=`mktemp –d /tmp/testdirXXX`
mktemp --tmpdir=/testdir testXXXXXX

?

set timeout 10 超时时长

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读