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

shell脚本

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

第一个shell脚本

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

mkdir shell
cd shell/
touch shelltest.sh

修改脚本文件的执行权限:chmod u+x shelltest.sh
vi shelltest.sh进入文件内容编辑界面,输入:

#!/bin/bash
echo '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 in
V1)
		语句块
;;
V2)
		语句块
;;
*)
		语句块
;;
esac
循环结构
for VAR in val1...valn
do
		语句块
done
for((初始化;条件;变化))	<=> (i=1;i<=100;i++)
do
	语句块
done
while[ condition ]
do
		语句块
done

猜你喜欢

转载自blog.csdn.net/weixin_44147632/article/details/107864670