shell编程基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程基础相关的知识,希望对你有一定的参考价值。


 

作者Georgekai

归档:学习笔记

2018/1/11

 


本章正题:shell编程基础

1.1 shell基础

1.1.1 为什么要学习shel编程

1. linux系统批量管理

2. 提升工作效率

3. 减少重复工作

4.

1.1.2 学好shell编程所需的基础知识

1. 熟练使用vim编辑器

2. 熟悉ssh终端

3. 熟练掌握linux常用命令

4. 熟练掌握linux正则表达式及三剑客命令

1.1.3 如何学好shell编程

1. 阅读,模仿

2. 核心:多练→多思考→再练→在思考,坚持循环

3. 大忌:不可别人的直接用,可以模仿,但自己要理解了掌握了才行

1.1.4 shell学习要求

1. 看懂简单脚本

2. 尝试写脚本

3. 变量,循环,判断

1.1.5 基础知识

1.什么是shell

1)命令解释器

2CentOS默认的shellbash

2.什么是shell脚本

1)命令大礼包,一个程序文件,包含若干行linux命令

2)循环,条件语句e

3.sh

4)文件类型:file   shell script

1.1.6 创建shell脚本

1. vim创建,带颜色

2. 第一行写#!/bin/bash,指定默认shell/bin/shell

注:不写的话,用file查看文件类型,就是个ASCII文本

#!/bin/bash

#author:georgekai

#date:20180111

#ver:1.1.1

#desc:

脚本内容:

1.1.7  shell脚本了解

1. 什么是变量:用一个固定的字符串,代替更多更复杂的内容

2. 变量的组成:字母、数字、下划线组成

 注:变量的开头不能是数字,可以是echo KAI=10 ,也可以是echo _KAI=10      但不可以是echo 3KAI=10

3. 变量的分类:局部变量、全局变量、特殊变量

1.1.8  局部变量(普通变量)

1.只能在当前环境下起作用,脚本中不起作用

2.取变量的内容:1) 空格:中间会留下空格,如:echo $KAI 5   8 5

        2{} :不会留下空格,紧挨着,如:echo ${KAI}5   85


技术分享图片

1.1.9  全局变量(环境变量)

1.系统的大部分全局变量都在env下面放着

2.手动创建临时的全局变量:export KAI=10

 永久生效:将export KAI=10放在/etc/profile下面

3.linux中其它地方都可以使用

4.取消全局变量:unset george

注:export source的区别

 1). source /etc/profile  : 让profile在当前环境中生效

 2). export     在全局中生效

1.1.10 环境变量的文件

1. /etc/profile :环境变量,别名

2. /etc/bashrc :别名

3. /etc/profile.d/ 1). 用户登录到系统之后就会立刻运行这个目录下的脚本          2). 要对脚本有执行权限x

测试小工具:yum install sl cowsay -y  

 (sl :显示小火车   cowsay  $(hostname):显示主机名和小奶牛)

注:fmtedprofile.d的区别

  /etc/motd    :文件中放什么显示什么

  /etc/profile.d/ :运行这个目录下面的脚本

4. ~/.bashrc :局部存放别名

5. ~/.bash_profile:局部变量

1.1.11  特殊变量($数字  $0 $#  $?

1. awk中变量的使用

awk  -vn1=3  -vn2=5  'BEGIN{print n1+n2,n1*n2,n1/n2}'

注:-v :让awk中可以使用变量,多个变量就用多个-v

2. 跟位置有关的变量 $n  n:表示数字)

在脚本中 $1  $2: 表示第一个参数和第二个参数

把命令行的内容,通过$1 $2传递到脚本中

技术分享图片


 

3. vim多行批量添加

1.ctrl + v

2. 方向键选择添加的位置

3.大写字母A  

4.添加要批量添加的内容

5.多按几次esc

4. vim多行批量删除

1.ctrl+v  

2.方向键选择

3.del 或者 d 或者x,建议用x

5. $0 表示脚本的名字

技术分享图片


 

6. $# 表示脚本参数的个数


技术分享图片



7. $? 上一个命令的返回值,看上一个命令是否执行正确

    注:0 :执行正确  0:执行不正确

例:ls /odlboy/  

  echo $?    查看ls /kai/是否执行成功

技术分享图片


1.1.12 如何向变量中放东西   read

 注:以下w是脚本中第一个参数,k是第二个。

1. 显示提示信息 -p

会出现提示信息,定义w和k的变量为100 200

[[email protected] scripts]# read -p "please input h1 h2:" w k

please input h1 h2:100 200

查看w和k的变量:

[[email protected] scripts]# echo $w $k

100 200

2. 指定超时时间为5-t5

5秒后,会自动退出

[[email protected] scripts]# read -t5 -p "please input h1 h2:" w k

please input h1 h2:[[email protected] scripts]#

注:-p 一定要放在最后面


3. 实现类似passwd输入密码不显示的功能 -s

定义w的变量为123456,但输入的字符不会显示

[[email protected] scripts]# read -s -p "passwd:" w

passwd:[[email protected] scripts]#


查看w的变量:

[[email protected] scripts]# echo $w

123456

1.1.13 read  -t5  -p  "please input h1 h2:"  w  k 放入脚本中 

技术分享图片

 

注:如果要加-s的话,需要在read下面加个echo,就不会显示到同一行了

随便给wang和kai俩个变量定义个值就可以让脚本替换执行了

技术分享图片


1.2 if判断(条件表达式)

1.2.1 判断一个文件或目录是否存在

1. 判断目录是否存在  [ -d /george/ ] | echo $?

    0就是存在,非0就是不存在

2. 判断文件是否存在 [ -f /george/kai.txt ] | echo $?

    0就是存在,非0就是不存在

1:判断系统中是否存在/george/georgedir  ,如果存在提示dir exist

[ -d /george/georgedir ] && echo "dir exist"

注:&& 表示前一个命令执行成功,后一个命令才执行

  ;表示前一个命令无论是否成功,都会执行后面的命令

2: 判断系统中是否存在/george/kai.txt ,如果不存在就创建kai.txt

[ -f /george/kai.txt ] || touch /george/kai.txt

注:||表示前面命令执行不成功,后面的命令才会执行

 

1.2.2 比较大小

[ 1 -eq 1 ] equal 等于==

[ 2 -ne 1 ] not equal不等于!=

[ 2 -gt 1 ] great than  大于>

[ 2 -ge 1 ] great equal大于等于>=

[ 2 -lt 10 ] less than 小于<

[ 2 -le 10 ] less equal小于等于<=

注:man test  查看更多的判断使用

1.2.3 在脚本开头增加一个条件,判断参数的个数是否为2

1.单分支判断

技术分享图片

 

注:1.$#表示参数的数量 

   2.如果没有exit,exit后面的命令都会执行

 


2.双分支判断

技术分享图片

技术分享图片



3.多分支判断

技术分享图片


1.2.4 for循环

格式: for 变量名字 in stu{01..10}

    do

    echo $变量名字

    done

技术分享图片 

 

1:通过for循环优化系统开机启动项目

  要保留的服务:crond  network  sshd rsyslog  sysstat(管理工具有关)

技术分享图片

chkconfig |greop3:on  :检查是否执行成功

 

总结:

1. 变量名字的规则

2. 特殊变量-位置-状态

    $n数字   $0   $#   $?(查看编译安装是否安装成功)

3. 全局变量与局部变量的区别

4. 判断和循环



关注微信公众号:linux运维菜鸟之旅

这章更新晚了半天,如果有什么不太理解的地方,欢迎留言

 


以上是关于shell编程基础的主要内容,如果未能解决你的问题,请参考以下文章

shell编程基础

Shell脚本编程基础

第九章shell脚本编程基础

SHELL脚本编程基础

第17篇 shell编程基础

编程语言和shell编程基础