专业技能篇:shell实例教程及脚本编写

序言

大家常时不容易看到shell脚本制作,可是必须阅读文章开发设计linux脚本制作时,这也是一项不可或缺的专业技能。文中取决于给予基本的shell程序编写英语的语法和简易的案例,协助同学们快速开发,可作为shell指南应用也十分善

  • shell脚本制作的实行和控制模块载入
  • shell中的自变量
  • 部位主要参数和预订义自变量
  • 关系式的计算指令
  • 关系式分辨标记及有关运算符
  • 自动跳转if语句
  • shell二维数组和词典
  • shell自定义函数
  • shell程序流程中常用命令

扫码关注,一起沟通交流,微信搜一搜: 背刺向前

shell脚本制作的实行和控制模块载入

  • shell脚本制作的实行
    • bash scriptNamesh 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

关系式的计算指令

  • Shell 中普遍的算术运算指令
操作符 叙述
(( 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 标准关键词
if  标准分辨;then 
     逻辑性编码
else
     逻辑性编码
fi
-------------------------
server11:~ # choose="lwl"
server11:~ # if [ choose == "lwl" ];then
> echo true
> else
> echo false
> fi;
false
  • case if语句
case  自变量  in
        one)
            逻辑性编码
;;
        two)
             逻辑性编码
;;
         *) 
             逻辑性编码
esac
  • for for语句
for  标准;do
   逻辑性编码
done
-------------
server11:~ # for (( i=0;i<2;i   ));do
> echo $i
> done;
0
1
  • while for语句
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条)

刀客源码 游客评论