【Linux中高级运维: 第58天——Shell编程】第9章: shell总结

跟老男孩学习Linux运维:Shell编程实战

第一章 如何学好Shell编程?

英语 背
编程 练 敲

江河是由小溪组成的。。。
简单判断 简单循环。。。多了就是大的程序。

大的程序 是由 每个小程序组成的,能够把【大程序分解为小程序】属于架构能力。

第二章 Shell入门
什么是shell?命令解释器 Linux Bash
什么是Shell脚本? 命令、语句、变量 放在文件执行

开头是解释器
#!/bin/sh

#注释

单多行注释
https://blog.51cto.com/oldboy/2120742

shell执行:
bash oldboy.sh
sh oldboy.sh

让当前执行的脚本在父Shell
. oldboy.sh
source oldboy.sh

必须给执行权限
./oldboy.sh
/server/scripts/oldboy.sh

cat oldboy.sh|bash
bash<./oldboy.sh

编程习惯:
“oldboy”
[ ddddd ]

if []
then
if[];then
echo ddd
fi
fi

for n in ddd
do
echo ddd
done

start(){
echo dddd
}

不用中文,尽量不要有中文

脚本.sh结尾

bash oldboy.sh
/bin/sh /server/scripts/oldboy.sh

变量定义 见名知意
Path
Oldboy
OldboyAge
OldboyAge
Oldboy_Age
oldboyAge

内容:
连续数字 不加引号
a=123

字符串用双引号
char=“I am oldboy”

path=/server/scripts

函数1(){
local a=1
}

函数2(){
echo $a
}

第三章 变量基础
环境变量:
默认存在:
[root@web01 scripts]# echo $UID
0
[root@web01 scripts]# echo $USER
root
自定义环境变量:
[root@web01 scripts]# export OLDBOY=1
[root@web01 scripts]# echo $OLDBOY
1
tomcat:

局部变量:

自定义变量:
变量名=变量内容
变量定义 见名知意
Path
Oldboy
OldboyAge
OldboyAge
Oldboy_Age
oldboyAge

内容:
连续数字 不加引号
a=123

第四章 变量深入和扩展
特殊位置变量:
$0 文件名
$n 1…9 脚本第几个参数
$# 传参个数
$* 所有参数 视为一个字符串
$@ 所有参数 每个参数视为一个独立字符串

特殊状态变量:
$? 上个命令返回值,0成功
$$ 当前脚本的进程号
$! 上一个后台运行的脚本的进程号
$_ 上一个脚本最后一个参数

变量子串
$OLDBOY
${#OLDBOY}
echo O L D B O Y ∣ w c − L e x p r l e n g t h " OLDBOY|wc -L expr length " OLDBOYwcLexprlength"OLDBOY"
awk ‘{print length}’
${OLDBOY:2:2}
${OLDBOY#dd}
${OLDBOY##dd}
${OLDBOY%dd}
${OLDBOY%%dd}
${OLDBOY/dd/ff}
${OLDBOY//dd/ff}

变量扩展
${OLDBOY:-word}
${OLDBOY:=word}
${OLDBOY:?word}
${OLDBOY:+word}

第五章 变量的数值运算

运算符:

      • / % **
        ++ –
        += -= a+=1 a=a+1

整数:
(())
let
$[]
expr 1 + 1

小数和整数:
bc
awk

判断整数:
expr $a + 999 &>/dev/null
echo $?

$a里的数字删除,看长度是否为0.

expr功能:
expr length “oldboy”
expr 1 + 1 计算
判断扩展名
判断整数

第六章 条件表达式

中括号
[] && echo 1 || echo 0
test && echo 1 || echo 0
[[]] && echo 1 || echo 0
(()) && echo 1 || echo 0

具体语法:
[] && echo 1
[] || echo 0

[] && {
ddd
fff
}

[] && {
ddd
fff
}||{
gggg
kkkk
}

文件表达式:
-d
-f
-e
-s
-r
-w

字符串表达式:
-n
-z
“dd” = “dd”
“dd” != “dd”

注意事项:
字符串必须双引号
运算符号两端有空格

整数表达式
[]
-eq
-ne
-gt
-lt
-le
-ge

逻辑表达式
! 非
&& -a 与 乘法
|| -o 或者 加法

[ 表达式1 -a 表达式2 ]

[[ 表达式1 &&表达式2 ]]

匹配正则
[[ =~ ]] #不要加双引号

第7章 if条件句*****
if []
then
fi

if []
then
else
fi

if []
then
elif []
then
else
fi

第8章 函数

function oldboy(){
ddddd
local i
return
}

oldboy(){ #推荐
ddddd
local i
return
}

function oldboy{
ddddd
local i
return
}
执行
oldboy

函数传参:
$1 $0 $* $@
oldboy 参数1

第九章 case语句

case “变量” in
值1)
顶顶顶顶
;;
值2)
定定
;;
值3)
发发发
;;
*)
echo “usage:$0 {start|stop}”
esac
应用服务启动脚本,菜单选择,操作。

第十章 while语句
while 条件
do
dddd
done

while 条件
do
dddd
done<文件

exec<文件
while 条件
do
dddd
done

cat 文件|while
do
dddd
done

重复循环处理,守护进程,小于1分钟的循环处理,无限循环。

第十一章 for语句

for 变量 in 变量列表
do
dddd
done

for((i=0;i<长度;i++))
do
dddd
done

重复做一件事,使用for。

第十二章 循环控制
exit 1 退出脚本 数字状态返回值
break 1 跳出第一层循环
continue 跳过当次循环
return 1 退出函数,数字状态返回值

脚本执行控制
sh 脚本 &
nohup sh 脚本 &
screen

ctrl+z 暂停
bg 后台
jobs
fg 2 将编号为2拿到前台
kill %编号
ctrl+c 停止脚本

第十三章 数组

定义:
arr=(1 2 3)
arr=(
1
2
3
)
arr=($(ls))

echo ${arr[0]}

echo ${arr[1]}

echo ${arr[*]}

echo ${arr[@]}

echo ${#arr[*]}

适合要处理的字符串比较多,但是每个字符串都需要单独处理的问题。

打印数组内容
for n in ${arr[*]}
do
echo $n
done

for((i=0;i<${#arr[*]};i++))
do
echo ${arr[i]}
done

第15章 Shell脚本的调试
调试方法1:
[root@web01 scripts]# sh -x oldgirl.sh

  • ‘[’ 1 -eq 1 ‘]’
  • echo 1
    1
  • echo 2
    2
  • echo 3
    3

15.2.3 使用bash命令参数调试
除了上述的方法外,本节将讲解最重量级的方法bash或sh的参数调试方法,例如:
[root@oldboy ~]# sh [-nvx] scripts.sh
参数说明如下。
 -n:不会执行该脚本,仅查询脚本语法是否有问题,并给出错误提示。
 -v:在执行脚本时,先将脚本的内容输出到屏幕上,然后执行脚本,如果有错误,也会给出错误提示。
 -x:将脚本运行过程输出显示到屏幕上,这是对调试很有用的参数。

调试方法2:
对于脚本一部分调试:
set -x
被调试的脚本
set +x

用echo调试
6 echo $a $b #<==增加打印输出,确认变量值是否符合要求。
7 exit #<==退出脚本,目的是不执行后面的代码。

本章主要介绍了Shell的调试技巧,包括:
1)要记得首先用dos2unix对脚本(从其它地方拿来用的)格式化。
2)执行脚本根据报错来调试时,要知道有时报错不准确,多关联上下文查看。
3)可通过sh -x命令调试整个脚本,且显示执行过程。
4)set -x和set +x命令用于调试部分脚本执行过程(可在脚本中设置)。
5)可通过echo命令输出脚本中要确认的变量及相关内容,然后紧跟着使用exit退出,不执行后面程序,这种方式便于一步步跟踪脚本,对于逻辑错误比较好用。写法即echo $var;exit
6)最关键的还是要语法熟练,养成好的编码习惯,提升编程思想,将编码错误扼杀在萌芽之中,从而降低或减轻调试负担,提高开发效率。

ssh-pass

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值