Sean's Blog


  • Home

  • Tags

  • Categories

  • Archives

  • Search

shell中的函数

Posted on 2019-08-08 | In shell

函数简介

shell中函数的定义格式如下:

1
2
3
4
5
6
[function] funname [()]
{
action;

[return int;]
}

说明:

  1. 可以带function fun() 定义,也可以直接fun()定义,不带任何参数。

  2. 参数返回,可以显示加: return 返回, 如果不加, 将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

测试脚本

1
2
3
4
5
6
7
#!/bin/bash

demoFun() {
echo "Hello World!"
}

demoFun

执行结果:

1
Hello World!

shell中的expr

Posted on 2019-08-08 | In shell

expr简介

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。

语法

1
expr 表达式

表达式说明:

  • 用空格隔开每个项

  • 用/(反斜杠)放在shell特定的字符前面

  • 对包含空格和其他特殊字符的字符串要用引号括起来

常见用法

计算字符串长度

1
expr length "this is a test"

抓取字串

1
expr substr "this is a test" 3 5

抓取第一个字符串出现的位置

1
expr index "sarasara" a

整数数学运算

1
expr 14 % 9

shell中的有类型变量

Posted on 2019-08-08 | In shell

有类型变量

shell本身是一种弱类型语言,但是可以通过预先设置类型对变量固定类型

declare 和 typeset 命令

shell中使用declare和typeset为变量固定类型,他们是完全等价的,大概格式为:

1
declare -命令 变量

参数列表

参数 说明
-r 将参数变为只读
-i 将参数设为整数
-a 将变量定义为数组
-f 显示此脚本之前定义过的所有函数及内容
-F 仅显示此脚本之前定义过的函数
-x 将脚本定义为环境变量

取消声明的变量

如果要取消一个变量的声明,可以将 - 替换成 + :

1
declare +命令 变量

测试脚本

1
2
3
4
#!/bin/bash
static=1024
declare -r static
static=1024

执行结果:

1
demo5.sh: line 4: static: readonly variable

shell中的数组

Posted on 2019-08-08 | In shell

shell中的数组

数组中可以存放多个值。Bash Shell只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。
数组元素的下标由0开始。

数组初始化

Shell数组用括号来表示,元素用空格符号分割开,语法格式如下:

1
array_name=(value1 ... valuen)

也可以使用下标来定义数组:

1
2
3
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

读取数组

读取数组的一般格式是:

1
${array_name[index]}

读取数组中的所有元素

使用@或*可以获取数组中的所有元素,例如:

1
2
${array_name[@]}
${array_name[*]}

读取数组的长度

1
2
${#array_name[@]}
${#array_name[*]}

删除数组

在Shell中,使用unset关键字来删除数组元素,格式如下:

1
unset array_name[index]

如果不写下标,则会删除整个数组:

1
unset array_name

测试脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
array=(A B C D)
echo ${array}
echo ${array[0]}
echo "the first element of array is ${array[0]}"
echo ${array[@]}
echo ${array[*]}
echo ${#array[@]}
unset array[2]
echo ${array[@]}
echo ${array[2]}
echo ${#array[@]}
# 注意array[2]被移除后,array的长度减少为3,但3的位置仍然空着,导致循环不会输出D
for ((i=0;i<${#array[@]};i++));
do
echo ${array[i]};
done

执行结果:

1
2
3
4
5
6
7
8
9
10
11
A
A
the first element of array is A
A B C D
A B C D
4
A B D

3
A
B

shell中的循环

Posted on 2019-08-08 | In shell

for循环的写法

数字型

1
2
3
4
for ((i=1;i<5;i++));
do
echo $i;
done
1
2
3
4
for i in $(seq 1 5)
do
echo $i;
done
1
2
3
4
for i in {1..10}
do
echo $i;
done

字符型

1
2
3
4
5
list="rootfs usr data data2"
for i in $list;
do
echo $i is appoint;
done
1
2
3
4
for i in f1 f2 f3;
do
echo $i is appoint;
done;

while循环

1
2
3
4
5
6
int=1
while(($int <=5))
do
echo $int
let "int++"
done

测试脚本

猜数字游戏:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
#用脚本演示使用结束标记控制while循环实现猜1~10内的数
echo "Please input the num (1~~10): "
read num
while [[ $num != 4 ]]
do
if [ $num -lt 4 ];then
echo "Too small,Try again.."
read num
elif [ $num -gt 4 ];then
echo "Too big,Try again.."
read num
else
exit 0
fi
done
echo "Yes,you are right !!"

执行结果:

1
2
3
4
5
6
7
Please input the num (1~~10):  
3
Too small,Try again..
6
Too big,Try again..
4
Yes,you are right !!

shell中的字符串

Posted on 2019-08-07 | In shell

字符串的声明

shell中的字符串可以用单引号,也可以用双引号,也可以不用引号

单引号

1
str='this is a string'

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的

  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号

1
str="this is a string"

双引号的优点:

  • 双引号里可以有变量

  • 双引号里可以出现转义字符

获取字符串的长度

1
2
string="abcd"
echo ${#string}

提取子字符串

语法 说明
${string:position} 从position位置开始
${string:position:length} 从position位置开始,匹配长度为length
${string:-position} 从右边开始匹配
${string:(position)} 从左边开始匹配
expr substr $string $position $length 从position位置开始,匹配长度为length

以下脚本将输出string 从第12位开始,5位长度的内容

1
2
string="Stopping by Woods on a Snowy Evening, Whose woods these are I think I know."
echo %{string:12:5}

查找字符串

查找字符i或o的位置(哪个字母先出现就计算哪个):

1
2
string="Stopping by Woods on a Snowy Evening, Whose woods these are I think I know."
echo `expr index "$string" io`

注意: 以上脚本 `是反引号

字符串的替换

语法 说明
${变量名#匹配规则} 从变量开头进行规则匹配,将符合最短的数据删除
${变量名##匹配规则 从变量开头进行规则匹配,将符合最长的数据删除
${变量名%匹配规则} 从变量尾部进行规则匹配,将符合最短的数据删除
${变量名%%匹配规则} 从变量尾部进行规则匹配,将符合最长的数据删除
${变量名/旧字符串/新字符串} 变量内容符合旧字符串,则第一个旧字符串会被新字符串取代
${变量名//旧字符串/新字符串} 变量内容符合旧字符串,则全部的旧字符串会被新字符串取代

字符串的测试

变量测试

变量测试表达式可以在变量为空或没有配置时返回特定的表达式,具体操作如下:

变量配置方式 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
2
`expr`
$(expr)

测试脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# !bin/bash
# 单引号创建字符串
str='Two roads diverged in a yellow wood,'
echo $str
# 双引号创建字符串
str="And sorry I could not travel both"
echo $str
# 双引号拼接字符串
var_and="And"
str1=$var_and" sorry I could not travel both"
str2="$var_and be one traveler, long I stood"
echo $str1 $str2
# 单引号拼接字符串
str1=$var_and' looked down one as far as I could'
str2='$var_and To where it bent in the undergrowth'
echo $str1 $str2
# 获取字符串的长度
echo ${#str1}
# 提取子字符串
echo ${str1:11:4}
# 查找子字符串
echo `expr index "$str1" Aok`
# 字符串的替换
str='Two roads diverged in a yellow wood,'
echo ${str#*o}
echo ${str##*o}
echo ${str%o*}
echo ${str%%o*}
echo ${str/w/f}
echo ${str//w/f}
# 变量的测试
str_empty=""
echo '-'
echo ${str_null-null}
echo ${str_empty-null}
echo ${str-null}
echo '='
echo ${str_null=null}
echo ${str_empty=null}
echo ${str=null}
echo ':-'
echo ${str_null:-null}
echo ${str_empty:-null}
echo ${str:-null}
echo ':='
echo ${str_null:=null}
echo ${str_empty:=null}
echo ${str:=null}
echo '+'
echo ${str_null+null}
echo ${str_empty+null}
echo ${str+null}
echo ':+'
echo ${str_null:+null}
echo ${str_empty:+null}
echo ${str:+null}
# 命令替换
indexOfA=`expr index "$str1" A`
indexOfo=$(expr index "$str1" o)
echo $indexOfA
echo $indexOfo

测试结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Two roads diverged in a yellow wood,
And sorry I could not travel both
And sorry I could not travel both And be one traveler, long I stood
And looked down one as far as I could $var_and To where it bent in the undergrowth
37
down
1
roads diverged in a yellow wood,
d,
Two roads diverged in a yellow wo
Tw
Tfo roads diverged in a yellow wood,
Tfo roads diverged in a yellof food,
-
null

Two roads diverged in a yellow wood,
=
null

Two roads diverged in a yellow wood,
:-
null
null
Two roads diverged in a yellow wood,
:=
null
null
Two roads diverged in a yellow wood,
+
null
null
null
:+
null
null
null
1
6

shell中的变量

Posted on 2019-08-07 | In shell

变量的定义

基本定义方式

定义shell变量时,直接使用 变量名=变量值 的格式就可以了,如下:

1
shell_variable="some variable"

注意: 变量名和等号之间不能有空格

语句中赋值

变量也可以直接在语句中赋值:

1
for skill in Ada Coffe Action Java:

变量命名规则

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头

  • 中间不能有空格,可以使用下划线(_)

  • 不能使用标点符号

  • 不能使用bash里的关键字

变量的使用

使用一个定义过的变量,只要在变量名前加美元符号即可,如:

1
2
echo $shell_variable
echo ${shell_variable}

在使用括号时加上大括号主要是为了区分变量的边界,如:

1
2
3
4
for skill in Ada Coffe Action Java;
do
echo "I am goot at ${skill}Script"
done

在这里如果不加大括号,shell将把skillScript当做变量名执行

设置只读变量

使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变。

1
2
myUrl="http://google.com"
readonly myUrl

变量的删除

使用unset命令可以删除变量。语法:

1
unset shell_variable

测试脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# !/bin/bash
# 声明一个变量
shell_variable="some variable"
# 使用变量的两种方式
echo $shell_variable
echo ${shell_variable}
# 用语句给变量赋值
for skill in Ada Coffe Action Java;
do
echo "I am goot at ${skill}Script"
done
# 只读变量
myUrl="http://www.google.com"
readonly myUrl
# 删除变量
unset shell_variable
echo $shell_variable

执行结果:

1
2
3
4
5
6
some variable
some variable
I am goot at AdaScript
I am goot at CoffeScript
I am goot at ActionScript
I am goot at JavaScript

CentOS切换阿里yum镜像源

Posted on 2019-08-06 | In linux环境配置
1
2
3
4
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache

CentOS6记得修改对应位置

CentOS安装nginx

Posted on 2019-08-06 | In linux环境配置

依赖项和必要组件

1
2
3
4
5
6
7
yum install -y make cmake gcc gcc-c++  

yum install -y pcre pcre-devel

yum install -y zlib zlib-devel

yum install -y openssl openssl-devel

下载安装nginx

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

CentOS安装Tomcat

Posted on 2019-08-06 | In linux环境配置

下载解压tomcat

1
2
3
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.5/bin/apache-tomcat-9.0.5.tar.gz
tar xvf apache-tomcat-9.0.5.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-9.0.5/ /usr/local/tomcat/

Tomcat 目录结构说明

目录 说明
bin 启动命令目录
conf 配置文件目录
lib 库文件目录
logs 日志文件目录
temp 临时缓存文件
webapps web应用目录
work 工作缓存目录

修改Tomcat环境变量

环境变量可以写在全局脚本中,但多个tomcat会有冲突。建议在 startup.sh 和 shutdown.sh 脚本前面加入以下内容:

1
2
3
4
export TOMCAT_HOME=/usr/local/tomcat
export CATALINA_HOME=/usr/local/tomcat
export CLASS_PATH=$JAVA_HOME/bin/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tool.jar
export PATH=$PATH:/usr/local/java/bin:/usr/local/tomcat/bin

启动Tomcat

1
/usr/local/tomcat/bin/startup.sh

查看进程状态

1
ps -ef | grep 'tomcat' | grep -v grep

关闭tomcat

1
/usr/local/tomcat/bin/shutdown.sh

或

1
kill -9 pid

pid是查看进程状态中查找出来的。

1…345

Sean

46 posts
10 categories
18 tags
© 2019 Sean
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4