05shell编程——好程序


shell编程:
shell是一个由c语言编写的,既是一种语言又是一种命令。是用户和linux沟通的桥梁,shell脚本是一种为shell编写的脚本程序,他可以理解为一个可执行的命令的集合。

shell解释器
shell编程和java、php一样,只需要一个文本编辑器和一个解释工具即可。
常见的shell比较多:
bourne sh : /bin/sh
bourne again sh : bash :linux上默认的shell,/bin/bash
c shell  :usr/bin/csh 

k shell : usr/bin/ksh 
shell for root : /sbin/sh

linux系统自带前3种shell 
 

脚本写法&测试如下:

------------------------------------------------------


shell变量
分为系统变量和自定义变量
系统变量 
set

自定义变量
int i = 1;
高级语言才是强类型的语言,编译型的语言都是弱类型的,不需要定义类型

变量以及作用域

总结:
1、a.sh中直接调用b.sh,会让b.sh在a所在的执行空间中开辟一个子空间来执行脚本
2、而子空间只能访问父进程中用export定义的变量(用了export相当于提升到了全局的变量)
3、一个shell进程无法将自己定义的变量提升到父进程空间
4、.号执行脚本时,会让脚本在调用者所在的shell进程空间中执行

规则:不能使用数字开头、首字母不要使用bash的关键字

引号的使用

hello worlds is best
a="hello world"
echo '$as is best'

双引号和单引号的区别
双引号仅将空格转义
单引号会将变量引用脱意


表达式赋值

$(()) 只负责计算

$[]

let  直接赋值

流程控制语句if

if [ $year -gt 1 ]; then echo "$year 年"; let year--; fi

判断条件
条件两边一定要带空格(没有空格就会被当成赋值)
只要是非空则返回true,否则返回false

注意[]内部=两边的空格

短路(三元运算符)
[ condition ] && echo ok || echo nook

条件满足,执行&&之后的语句,不满足,则执行||之后的语句

[] 的区别 [[]]
[] 里面使用 -a -o 
[[]]里面使用&& ||

if [ a = b && b = c ] ;then echo ok;else echo "nook";fi

if [[ a = b && b = c ]] ;then echo ok;else echo "nook";fi

if [ a = a -a b = b ] ;then echo ok;else echo "nook";fi

if [[ a = a || b = c ]] ;then echo ok;else echo "nook";fi

循环、case

 

函数的简单案例

函数
语法:
[function] 函数名称[()]
{
    action;
    [return int;] //0-255之间
}

调用方式
function start()
function start
start 1 2 1 3

 

 

函数的参数、跨脚本调用

注意:
1、声明shell的函数,必须在调用函数之前进行声明。因为shell脚本是逐行调用的
2、函数的返回值,只能通过$?系统变量来获取,可以显式的定义返回值:return int;如果不加return,将以最后一条命令运行结果,作为返回值。return的范围(0-255)

脚本调试:
sh -vx myfunction.sh  (加上-vx)
在脚本中加 set -x  (首行)

函数参数
注意:$10不能表示第十个参数,要获得第十个参数必须使用${10}。当n>=10时,需要使用${n}来获取参数

函数返回值:
通过$?来获取函数的返回值

跨脚本调用函数:
. function.sh
或者 source function.sh

直接suorce下,在哪个地方都能使用


先配置一个文件服务器,将所有的软件(如mysql、httpd、jdk等)放到文件服务器上,批量安装,必须要有一个启动的脚本,要在一台机器上启动脚本
但是安装的话,则必须要在每台机器上还需要有一个安装脚本,所以要一个启动脚本boot.sh是用来启动任务的,且在boot.sh里面将install.sh脚本下发到各个节点,然后在启动各个install.sh(先下发,再启动),install.sh里面则是先下载安装包,然后安装配置jdk


测试expect的使用

可以用expect这个函数进行捕获终端的输出,

##!/bin/bash/expect
## exp_test.sh
set timeout -1;      ###-1是超时,执行失败
spawn ssh hadoop0002;    ###启动监控ssh的操作   spawn (监控)
expect {
    "(yes/no)" {send "yes\r";exp_continue;}   ##监控输出,如果出现了yes/no的提示,则发送一个yes回车
    "password:" {send "123456\r";exp_continue;}##监控password关键字
    eof        {exit 0;}##遇到 eof结束符,退出
}

发送完一次后会继续监控直到没有输出为止

将需要的版本的jdk上传到创建的目录中

作业:
1、机器配置在脚本中,需要改进。可以配置在文件中
2、将ssh免密配置完整的在脚本中实现(需要可重复执行),免密需要主机与主机之间相互。
3、去掉输出内容
4、并行执行

 01Linux基础与常用命令——好程序

 02Linux克隆&常用命令——好程序

 03Linux上常用的软件安装——好程序

 04Linux操作增强部分——好程序

 05shell编程——好程序

发布了190 篇原创文章 · 获赞 16 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/penghao_1/article/details/104363243