摘要
shell脚本制作是必不可少的专业技能。本文将为大家提供基本的语法和简易的案例,帮助大家快速开发。通过控制模块和自变量的计算指令,实现预订义自变量关系式的计算。让我们一起来学习吧!
正文
专业技能篇:shell实例教程及脚本编写
序言
大家常时不容易看到shell脚本制作,可是必须阅读文章开发设计linux脚本制作时,这也是一项不可或缺的专业技能。文中取决于给予基本的shell程序编写英语的语法和简易的案例,协助同学们快速开发,可作为shell指南应用也十分善
- shell脚本制作的实行和控制模块载入
- shell中的自变量
- 部位主要参数和预订义自变量
- 关系式的计算指令
- 关系式分辨标记及有关运算符
- 自动跳转if语句
- shell二维数组和词典
- shell自定义函数
- shell程序流程中常用命令
扫码关注,一起沟通交流,微信搜一搜: 背刺向前
shell脚本制作的实行和控制模块载入
- shell脚本制作的实行
bash scriptName
或 sh scriptName
,当脚本文件自身沒有实行管理权限常常应用的方式
path/scriptName
或 ./scriptName
,在当今途径下实行脚本制作,必须将脚本文件的管理权限改成可实行
source scriptName
或 . scriptName
,一般 是应用source或 “.” 读取或载入特定的Shell脚本文件,随后先后实行特定的Shell脚本制作中的句子
- shell标准
- 一个标准的Shell脚本制作在第一行会强调由哪一个程序流程(编译器)来实行脚本制作中的內容,这一行內容Linux bash的程序编写一般为:#!/bin/bash 或 #! /bin/sh,bash与sh的差别 , sh为bash的导电软连接
shell 中的自变量
- 自变量的取值方式为: 先写自变量名字,随后是 “=” ,最终是值,正中间无一切空格符
取值时应用带引号的作用
- 引号:容许根据 $ 标记引入别的变量类型
- 单引号:严禁引入别的变量类型,$ 视作一般标识符
- 反引号:指令更换,获取指令实行后的輸出結果
- 实例
--- 引号 ----
server11:~ # A=hello
hello
server11:~ # B="$A lwl"
hello lwl
--- 单引号 ---
server11:~ # B='$A lwl'
$A lwl
---- 反引号 -----
server11:~ # B=`du -sh /etc`
21M /etc # du -sh /etc 的实行結果
部位主要参数和预订义自变量
标记 |
叙述 |
$# |
部位主要参数的总数 |
$* |
全部部位主要参数的內容 |
$? |
指令实行后回到的情况,0表明沒有不正确,非0表明有不正确 |
$$ |
当今过程的过程号 |
$! |
后台程序的最后一个过程号 |
$0 |
当今实行的过程名 |
${n} |
第 {n} 个部位主要参数 |
- shell取第一个部位主要参数更换体系文件中的 $1,第二个更换 $2 , 依次类推。$0 是一个独特自变量,它的內容是当今这一shell程序流程的文件夹名称
server11:~ # cat test.sh
#! /bin/bash
echo $1
server11:~ # bash test.sh lwl
lwl
关系式的计算指令
操作符 |
叙述 |
(( expresions )) |
用以整数金额计算的计算指令 |
let expresions |
相近(()),常见于取值关系式 |
expr expresions |
可用以 整数金额计算,可运行命令 |
$[ expresions ] |
用以整数金额计算 |
- 针对(())计算指令,其传参必须应用$ 装饰,如: i=$(($A 3))
- 实例
server11:~ # A=10
server11:~ # B=$(($A 5))
server11:~ # echo $B
15
关系式分辨标记及有关运算符
分辨标记 |
叙述 |
test condition |
运用test指令开展标准分辨 |
[ condition ] |
运用中扣号指令开展标准分辨 |
[[ condition ]] |
运用双中扣号指令开展标准分辨 |
(( condition )) |
不可以用以字符串比较 |
文档分辨运算符 |
叙述 |
-d (directory) |
文档存有且为文件目录则为真 |
-f (file) |
文档存有且为文档则为真 |
-e (exists) |
文档存有则为真 |
-s (size) |
文档存有且尺寸不以0则为真 |
-r (read) |
文档存有且可写则为真 |
-w (write) |
文档存有且应写则为真 |
-x (executable) |
文档存有且可实行则为真 |
-L (link) |
文档存有且为链接文件则为真 |
f1 -nt f2 ,nt的全拼音为newer than |
文档f1比文档f2新则为真 |
f1 -ot f2 ,ot的全拼音为older than |
文档f1比文档f2旧则为真 |
- 字符串数组分辨运算符( == 和 != 两边要有空格符, (()) 不可以用以标识符分辨)
常见字符串数组分辨运算符 |
叙述 |
-n |
若数组长度不以0,则为真 |
-z |
若数组长度为0,则为真 |
“str1” == “str2” |
若str1相当于str2,则为真 |
“st1” != “str2” |
若str1并不等于str2,则为真 |
在[]及其test中应用的较为标记 |
在(())和[[]]中应用的较为标记 |
叙述 |
-eq |
== 或 = |
相同(equal) |
-ne |
!= |
不相同(not equal) |
-gt |
> |
超过(greater than) |
-ge |
>= |
高于或等于(greater equal) |
-lt |
< |
低于(less than) |
-le |
<= |
不大于(less equal) |
在[]和test中应用的逻辑性运算符 |
在[[]]和(())中应用的运算符 |
叙述 |
-a |
&& |
and ,与,两边都为真,才为真 |
-o |
|| |
or ,或, 两边有一个为真,就为真 |
! |
! |
not ,非, 两边反过来,则結果为真 |
- 关系式分辨标记 test 、[] 、[[]] 、 (()) 的差别
关系式分辨标记 |
test |
[] |
[[]] |
(()) |
界限是不是必须空格符 |
必须 |
必须 |
必须 |
不用 |
逻辑性运算符 |
! 、-a、 -o |
! 、-a、 -o |
! 、&& 、 || |
! 、&& 、 |\ |
整数金额较为运算符 |
-eq 、 -gt 、-lt、-ge 、-le |
-eq 、 -gt 、-lt、-ge 、-le |
-eq 、 -gt 、-lt、-ge 、-le 或 = 、> 、< 、 >= 、 <= |
= 、> 、< 、 >= 、 <= |
字符串比较运算符 |
= 、 == 、!= |
= 、 == 、!= |
= 、 == 、!= |
不兼容 |
文档实际操作 |
-d、-f、-e、-r、-s、-w、-x、-L、-nt、-ot |
-d、-f、-e、-r、-s、-w、-x、-L、-nt、-ot |
-d、-f、-e、-r、-s、-w、-x、-L、-nt、-ot |
不兼容 |
是不是适用使用通配符配对 |
不兼容 |
不兼容 |
适用 |
不兼容 |
server11:~ # [ 1 == 1 -a 2 == 3 ] && echo true # 2并不等于3,因而true没打印出出去
server11:~ # [ 1 == 1 -a 2 == 2 ] && echo true
true
自动跳转if语句
if 标准分辨;then
逻辑性编码
else
逻辑性编码
fi
-------------------------
server11:~ # choose="lwl"
server11:~ # if [ choose == "lwl" ];then
> echo true
> else
> echo false
> fi;
false
case 自变量 in
one)
逻辑性编码
;;
two)
逻辑性编码
;;
*)
逻辑性编码
esac
for 标准;do
逻辑性编码
done
-------------
server11:~ # for (( i=0;i<2;i ));do
> echo $i
> done;
0
1
while 标准
do
逻辑性编码
done
-------------------------
server11:~ # i=0
server11:~ # while [[ $i -lt 2 ]];do
> let i
> echo $i
> done;
1
2
- break、continue、exit 循环系统操纵句子
- Break跳出来for while 循环系统
- Continue绕过当次循环系统,实行下一次循环系统
- exit立即撤出程序流程
shell二维数组和词典
#方法一
server11:~ # array=(A B "C" D)
#方法二
server11:~ # array[0]='csc'
server11:~ # array[1]='lwl'
server11:~ # echo ${#array[*]} ## 获得数组长度 二维数组的长短 ${#array[@]} 和 ${#array[*]}
2
server11:~ # for((i=0;i<${#array[@]};i )); do echo ${array[$i]}; done;
csc ## 字符解析xml
lwl
server11:~ # for i in ${array[@]}; do echo $i; done;
csc ## 立即解析xmlvalue
lwl
server11:~ # declare -A dic ## 申明 dic
server11:~ # dic=([csc]="hello" [lwl]="world")
server11:~ # echo ${!dic[*]}
lwl csc ## 打印出全部key
server11:~ # echo ${dic[*]}
world hello ## 打印出全部value
server11:~ # echo ${dic["lwl"]}
world ## 打印出特定key的value
server11:~ # for key in $(echo ${!dic[*]}) ##解析xml dic
> do
> echo "$key : ${dic[$key]}"
> done;
lwl : world
csc : hello
shell自定义函数
function funcName(){
echo "data: $1"
}
-----调用函数----
server11:~ # source func.sh
server11:~ # funcName 10
data: 10
- 引入自定义函数文档时,应用
source func.sh
载入文档
- 涵数传送主要参数(能够应用类似Java中的args,args[1]意味着Shell中的 $1)
shell程序流程中常用命令
- shell程序流程可应用在shell互动页面的一切指令
常见的指令方式 |
叙述 |
git |
编码版本管理 |
awk、sed |
文本检索指令 |
mvn |
java服务项目常见的装包指令 |
java |
jvm 运行有关 |
docker |
服务项目docker镜像系统装包 |
kubectl |
k8s有关布署指令 |
热烈欢迎指文章正文中不正确
参照文章内容
- Shell 实例教程
- Linux中撰写Shell脚本制作
- shell程序编写
关注不迷路
扫码下方二维码,关注宇凡盒子公众号,免费获取最新技术内幕!

温馨提示:如果您访问和下载本站资源,表示您已同意只将下载文件用于研究、学习而非其他用途。
评论0