0%

Shell编程

Shell编程

基本介绍

使用普通的文本编辑器即可编写,这里创建一个a.sh的shell脚本

开头第一行为 : #! /bin/bash //目录表示shell类型

执行方法: cd到文件所在目录,./a.sh //注意不可直接写a.sh,如果这样写系统会到环境变量的path项中添加的目录中去寻找该文件执行,因为往往我们的shell脚本并没有在这些目录里面则系统无法找到该文件。

变量

定义变量

1
2
var="armandhe"
echo $var

等号两端不能有空格

使用变量

1
2
var="armandhe"
echo "I am ${var}you son of bitch!"

{}用于定义变量边界

只读变量

1
2
3
4
var="armandhe"
readonly var
echo "I am ${var}you son of bitch!
var="hejixiong" #修改只读变量会报错

删除变量

1
2
var="armandhe"
unset var

不能删除只读变量

shell变量

**局部变量:**shell脚本中定义的变量,只能在脚本中使用

**环境变量:**所有的程序,包括shell启动的程序都可以访问环境变量

**shell变量:**由shell程序设置的特殊变量,有一部分是环境变量有一部分是局部变量

字符串

简介

可以使用单引号也可以使用双引号

单引号中的内容原样输出

双引号中的内容可以包含变量,

\ 为转义标志

1
2
3
4
var="armanhe"
echo 'nihao'
echo "nihao"
echo "nihao \"${var}\""

字符串长度

1
2
var="armandhe"
echo ${#var} #输出8

提取子字符串

1
2
var="armanhe"
echo ${var:1:3} # 输出rma

数组

通过下标访问,下标的开始值为0,只有一维数组,且无大小限制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
array1=(1 2 3 45 56 43)
array2=(
1
2
3
45
56
43
)
declare -A array4 #声明数组
array3[0]=1
array3[1]=134
array3[2]=145
array4[234]=44
echo ${array1[0]}
echo ${array1[@]} #获取数组中所有元素

获取数组长度

1
2
3
4
5
array=(1 2 3 45 56 43)
echo ${#array[@]}
echo ${#array[*]}
echo ${#array[n]} #获取数组中某个元素的长度

多行注释

1
2
3
4
5
6
:<<EOF
多行注释
echo ${#array[@]}
echo ${#array[@]}
echo ${#array[@]}
EOF

参数传递

1
2
3
4
5
6
#! /bin/bash
# 文件名a.sh
echo "脚本名为$0"
echo "第一个参数为$1"
echo "第二个参数为$2"
echo "第三个参数为$3"

chmod +x a.sh

./a.sh 12 “hjx” ‘red’

Untitled

流程控制

if else

1
2
3
4
5
6
7
8
9
10
11
$a=10
$b=12
if [$a -gt $b]
then
echo [$a + $b]
elif $a -eq $b
then
echo [$a - $b]
else
echo [$a \* $b]
fi

for

1
2
3
4
5
6
7
for i in `ls`
do
echo $i
done
for (i=1;i<10;i++);do
echo $i
done

while

1
2
3
4
5
6
int=1
while(($int<=5))
do
echo $int
let "int++" #使用let命令,在变量计算中就不需要加上$
done

until

1
2
3
4
5
6
7
a=0
until [! $a -lt 10]
do
echo $a
a=`expr $a + 1`
done

当条件不成立的时候执行代码块

当条件成立时跳出循环,与while正好相反

case … esac

1
2
3
4
5
6
7
8
read num
case $num in
1) echo '你选择了1'
;;
2) echo '你选择了2'
;;
*) echo '请正常输入'
esac

函数

1
2
3
4
5
6
7
8
9
function test(){
echo '这是一个函数'
echo $1 $2
return $1 $2
}
test 1 2
func=function{
#body
}

输入输出重定向

Untitled

文件包含

. filename

source filename

Buy me a coffee.

欢迎关注我的其它发布渠道