AI智能
改变未来

linux学习之Shell脚本编程(图文)


shell脚本

可以在shell界面执行的命令文剑(命令文件:含有各种命令的文本)

第一个shell脚本

新建一个shell文件夹(测试方便),在shell文件夹下,新建shell脚本文件shelltest.sh

mkdir shellcd shell/touch shelltest.sh

修改脚本文件的执行权限:

chmod u+x shelltest.sh

vi shelltest.sh

进入文件内容编辑界面,输入:

#!/bin/bashecho \'hello shell

#!

是一个约定的标记,让系统用bash解释器来执行这个脚本

./shelltest.sh

执行脚本,执行结果:

shell中的变量

定义变量: 变量名=值

name_123=\'你好,shell\'

注意点:
1、\”=\”左右不能有空格
2、变量名只能由英文字母、数字、下划线组成,且不能以数字开头
3、不能使用bash里的关键字

变量使用:使用时在变量前加美元符$

name_123=\'你好,shell\'echo $name_123

执行结果:

只读变量: 在变量前加

readonly

删除变量:

unset 变量名

变量类型:
系统变量

echo $PATH printf‘%s\\n%s\\n%s\\n’$PATH $PWD $USER $UID $HOME $HOSTNAME

set:

显示所有系统变量
自定义变量:
弱类型(通常为字符串、数值)
数组

([val1,...valn])

环境变量:跨SHELL访问
全局变量:当前SHELL访问,每个SHELL会话都是独立进程,有独立的PID,不同SHELL的会话之间不会互相交叉影响,函数中的变量默认也是全局变量
局部变量:当前函数中访问,函数中声明局部变量:

local A=5

shell 传递参数:

预定义变量:

$?

最后一次执行命令的返还状态。0表示正常,其他表示异常

$$

当前进程的进程编号PID

$!

后台运行的最后一个进程的PID

$0

命令本身

$n

int(n>0) 表示第几个参数

echo $0	#命令本身echo $1	#打印第一个参数echo $2	#打印第二个参数echo \'参数数量:\' $#

执行脚本:

$*

所有参数(整体)

$@

所有参数(个体)

$#

参数数量

shell字符串

单引号: 会按单引号中输出原本内容
双引号: 如果双引号中有命令,则会执行

字符串拼接

str1=\"hello\"str2=\"shell\"str3=\"!\"echo $str1 $str2 $str3

执行结果:

获取字符串长度

str=\"hello shell !\"echo ${#str}

执行结果:

截取字符串

str=\"hello shell !\"echo ${str:2:8}		#第2个字符开始截取8个字符

执行结果:

字符串查找

str=\"hello shell !\"echo `expr index \"$str\" s`		#查找s在str中的位置

执行结果:

shell数组

在shell 中,用括号来表示数组,元素用空格隔开

array=(a b c d e)echo ${array[0]}echo ${array[@]}

在读取数组时,可以

echo ${array[下标]}

,也可以用

echo ${array[@]}

全读
输出结果:

获得数组长度:

array=(a b c d e)length1=${#array[@]}length2=${#array[*]}echo $length1 $length2

执行结果:

shell注释

单行注释:

#

多行注释:

:<<!......!

shell控制台输入

read -t SECONDS -p \"HINT\" VAR

-t 超时(秒)
-p 提示
VAR 控制台输入值赋值的变量

shell运算符

算术运算符:

+	 - 		* 	 	/ 	%

算数表达式:

$((EXP)) 		 S=$((2+3))

$[EXP]			 S=$[2*3]

expr EXP

分布计算
注意:

\\*

表示乘法,其他相同,运算符前后必须加空格

S=`expr 2 \\* 3`


关系运算符和条件表达式:

condition # 前后加空格[ condition ]  #  -eq(等于) -en(不等于) -gt(大于) -lt(小于) -ge(等于等于) -le(小于等于)test condition # 同上[[ condition ]] # 同上

罗辑运算符

!

-o

-a

shell逻辑控制

分支结构

if[ condition ]then语句块fi
if[ condition1 ]then语句块elif[ condition2 ]then语句块else语句块fi
case $VAR inV1)语句块;;V2)语句块;;*)语句块;;esac

循环结构

for VAR in val1...valndo语句块done
for((初始化;条件;变化))	<=> (i=1;i<=100;i++)do语句块done
while[ condition ]do语句块done
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » linux学习之Shell脚本编程(图文)