函数简介
shell中函数的定义格式如下:
1 | [function] funname [()] |
说明:
可以带function fun() 定义,也可以直接fun()定义,不带任何参数。
参数返回,可以显示加: return 返回, 如果不加, 将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
测试脚本
1 | !/bin/bash |
执行结果:
1 | Hello World! |
shell本身是一种弱类型语言,但是可以通过预先设置类型对变量固定类型
shell中使用declare和typeset为变量固定类型,他们是完全等价的,大概格式为:
1 | declare -命令 变量 |
参数 | 说明 |
---|---|
-r | 将参数变为只读 |
-i | 将参数设为整数 |
-a | 将变量定义为数组 |
-f | 显示此脚本之前定义过的所有函数及内容 |
-F | 仅显示此脚本之前定义过的函数 |
-x | 将脚本定义为环境变量 |
如果要取消一个变量的声明,可以将 - 替换成 + :
1 | declare +命令 变量 |
1 | #!/bin/bash |
执行结果:
1 | demo5.sh: line 4: static: readonly variable |
数组中可以存放多个值。Bash Shell只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。
数组元素的下标由0开始。
Shell数组用括号来表示,元素用空格符号分割开,语法格式如下:
1 | array_name=(value1 ... valuen) |
也可以使用下标来定义数组:
1 | array_name[0]=value0 |
读取数组的一般格式是:
1 | ${array_name[index]} |
使用@或*可以获取数组中的所有元素,例如:
1 | ${array_name[@]} |
1 | ${#array_name[@]} |
在Shell中,使用unset关键字来删除数组元素,格式如下:
1 | unset array_name[index] |
如果不写下标,则会删除整个数组:
1 | unset array_name |
1 | #!/bin/bash |
执行结果:
1 | A |
1 | for ((i=1;i<5;i++)); |
1 | for i in $(seq 1 5) |
1 | for i in {1..10} |
1 | list="rootfs usr data data2" |
1 | for i in f1 f2 f3; |
1 | int=1 |
猜数字游戏:
1 | #!/bin/bash |
执行结果:
1 | Please input the num (1~~10): |
shell中的字符串可以用单引号,也可以用双引号,也可以不用引号
1 | str='this is a string' |
单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
1 | str="this is a string" |
双引号的优点:
双引号里可以有变量
双引号里可以出现转义字符
1 | string="abcd" |
语法 | 说明 |
---|---|
${string:position} | 从position位置开始 |
${string:position:length} | 从position位置开始,匹配长度为length |
${string:-position} | 从右边开始匹配 |
${string:(position)} | 从左边开始匹配 |
expr substr $string $position $length | 从position位置开始,匹配长度为length |
以下脚本将输出string 从第12位开始,5位长度的内容
1 | string="Stopping by Woods on a Snowy Evening, Whose woods these are I think I know." |
查找字符i或o的位置(哪个字母先出现就计算哪个):
1 | string="Stopping by Woods on a Snowy Evening, Whose woods these are I think I know." |
注意: 以上脚本 `是反引号
语法 | 说明 |
---|---|
${变量名#匹配规则} | 从变量开头进行规则匹配,将符合最短的数据删除 |
${变量名##匹配规则 | 从变量开头进行规则匹配,将符合最长的数据删除 |
${变量名%匹配规则} | 从变量尾部进行规则匹配,将符合最短的数据删除 |
${变量名%%匹配规则} | 从变量尾部进行规则匹配,将符合最长的数据删除 |
${变量名/旧字符串/新字符串} | 变量内容符合旧字符串,则第一个旧字符串会被新字符串取代 |
${变量名//旧字符串/新字符串} | 变量内容符合旧字符串,则全部的旧字符串会被新字符串取代 |
变量测试表达式可以在变量为空或没有配置时返回特定的表达式,具体操作如下:
变量配置方式 | str没有配置 | Str为空字符串 | Str已配置且非空 |
---|---|---|---|
var=${str-expr} | var=expr | var= | var=$str |
var=${str=expr} | var=expr | var= | var=$str |
var=${str:-expr} | var=expr | var=expr | var=$str |
var=${str:=expr | var=expr | var=expr | var=$str |
var=${str+expr} | var= | var=expr | var=expr |
var=${str:+expr} | var= | var= | var=expr |
表达式如 expr 会将结果输出到控制台,如果希望作为值,需要使用命令替换语句。语法为:
1 | `expr` |
1 | # !bin/bash |
测试结果:
1 | Two roads diverged in a yellow wood, |
定义shell变量时,直接使用 变量名=变量值 的格式就可以了,如下:
1 | shell_variable="some variable" |
注意: 变量名和等号之间不能有空格
变量也可以直接在语句中赋值:
1 | for skill in Ada Coffe Action Java: |
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
中间不能有空格,可以使用下划线(_)
不能使用标点符号
不能使用bash里的关键字
使用一个定义过的变量,只要在变量名前加美元符号即可,如:
1 | echo $shell_variable |
在使用括号时加上大括号主要是为了区分变量的边界,如:
1 | for skill in Ada Coffe Action Java; |
在这里如果不加大括号,shell将把skillScript当做变量名执行
使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变。
1 | myUrl="http://google.com" |
使用unset命令可以删除变量。语法:
1 | unset shell_variable |
1 | # !/bin/bash |
执行结果:
1 | some variable |
1 | curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo |
CentOS6记得修改对应位置
1 | yum install -y make cmake gcc gcc-c++ |
1 | wget http://nginx.org/download/nginx-1.12.2.tar.gz |
其他版本访问: http://nginx.org/en/download.html
1 | tar zxvf nginx-1.12.2.tar.gz && cd nginx-1.12.2 |
1 | ./configure && make && make install |
1 | ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx |
1 | nginx |
1 | nginx -s reload |
1 | wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.5/bin/apache-tomcat-9.0.5.tar.gz |
目录 | 说明 |
---|---|
bin | 启动命令目录 |
conf | 配置文件目录 |
lib | 库文件目录 |
logs | 日志文件目录 |
temp | 临时缓存文件 |
webapps | web应用目录 |
work | 工作缓存目录 |
环境变量可以写在全局脚本中,但多个tomcat会有冲突。建议在 startup.sh 和 shutdown.sh 脚本前面加入以下内容:
1 | export TOMCAT_HOME=/usr/local/tomcat |
1 | /usr/local/tomcat/bin/startup.sh |
1 | ps -ef | grep 'tomcat' | grep -v grep |
1 | /usr/local/tomcat/bin/shutdown.sh |
或
1 | kill -9 pid |
pid是查看进程状态中查找出来的。