您的位置:首页 > 运维架构 > Shell

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

2020-08-08 19:51 1436 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: