⒈为什么要学习Shell编程

  1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理

  2)对于JavaEE和Python程序员来说,有些工作需要编写一些Shell脚本进行程序或者是服务器的维护,例如编写一个定时备份数据库的脚本。

  3)对于大多数程序员来说,需要编写Shell程序来管理集群。

⒉Shell是什么?

  Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止程序,甚至是编写一些程序。

⒊Shell脚本的格式要求

  ①Shell脚本以#! /bin/bash开头  ★含义是指定当前Shell脚本以那种Shell方式进行解析

  ②脚本需要有可执行权限。

⒋Shell脚本的执行方式

  ①输入脚本的绝对路径或相对路径

    ★1.执行的脚本需要有x(可执行)权限

  ②sh + 输入脚本的绝对路径或相对路径(不推荐)

    ★1.执行的脚本无需x(可执行)权限

⒌Shell语法

  1)变量

    ⅰ区分

      Shell变量分为系统变量和用户自定义变量

      系统变量有:$HOME,$PWD,$SHELL,$USER等等

      ★显示当前shell中所有变量:set | more 【带分页】

    ⅱ定义

      ①基本语法

        ⑴定义变量:变量名=值

        ⑵撤销变量:unset 变量名

        ⑶声明静态变量:readonly 变量名,注:静态变量不能unset(撤销)。

      ②定义变量的规则

        ⑴变量名称可以用字母、数字和下划线组成,但是不能以数字开头。

        ⑵★等号两侧不能有空格。(一定注意)

        ⑶变量名称一般习惯为大写。

      ③补充

        ⑴C=`A-B`  反引号

        ⑵C=$(A-B)  等价于反引号

        ★每行代码不能以;结尾,#代表单行注释,:<<!内容!代表多行注释

    ⅲ设置环境变量

      ①export 变量名=变量值  将shell变量输出为环境变量

      ②source 配置文件  让修改后的配置信息立即生效

      ③echo $变量名  查询环境变量的值

    ⅳ位置(执行)参数变量

      ①介绍

        当我们执行一个Shell脚本时,如果希望获取到执行脚本时的参数信息,就可以使用位置(执行)参数变量。

        例如:执行./myshell.sh 100 200命令,我们可以通过位置(执行)参数变量从而在myshell脚本中获取并使用参数值100,200。

      ②基本语法

        ⑴$n:n为数字,$0代表命令行本身,$1-$9代表第1到第9的参数,第10及以上的参数需要用大括号包含,例如${12}。

        ⑵$*:这个变量代表命令行中所有的参数,$*把所有的参数看做为一个整体。

        ⑶$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待。

        ⑷$#:这个变量代表命令行中所有参数的个数。

    ⅴ预定义变量

      ①介绍

        就是Shell设计者事先已经定义好的变量,可以直接在Shell脚本中使用。

      ②基本语法

        ⑴$$:当前进程的进程号(PID)

        ⑵$!:后台运行的最后一个进程的进程号(PID)

        ⑶$?:最后一次执行命令的返回状态,0代表正在执行,非0代表执行错误

  2)运算符

    ⅰ介绍

      如何在Shell中进行各种运算操作

    ⅱ基本语法

      ①$((运算式))

      ②$[运算式]  ★推荐  

      ③expr 运算式

        ⑴expr中运算式中的运算符两边要有空格。

        ⑵expr特殊的运算符需要转义,例如:\*(乘号)

  3)条件判断

    ⅰ基本语法

      [ 表达式 ]  ★表达式的两边要有空格

      非空返回true,可使用$?验证(0为true,>1为false)

      例 [ 表达式 ] && echo OK || echo notOK  条件满足,执行后面的语句

    ⅱ常用条件判断

      ①整数之间的比较

        ⑴=  字符串比较

        ⑵-lt  小于

        ⑶-le  小于等于

        ⑷-eq  等于

        ⑸-gt  大于

        ⑹-ge  大于等于

        ⑺-ne  不等于

      ②按照文件权限进行判断

        ⑴-r  有读的权限

        ⑵-w  有写的权限

        ⑶-x  有执行的权限

      ③按照文件类型进行判断

        ⑴-f  文件存在并且是一个常规的文件

        ⑵-e  文件存在

        ⑶-d  文件存在并且是一个目录

    ⅲ if判断

      ①基本语法

        ⑴  if [ 条件判断式 ]; then

              程序

            fi

        ⑵  if [ 条件判断式 ]

            then

              程序

            elif [ 条件判断式 ]

            then

              程序

            fi

        ★1,[ 条件判断式 ],条件判断式两边必须有空格

           2,推荐使用第2种方式

    ⅳ case语句

      ①基本语法

        case $变量名 in

        "值1")

          如果等于值1,则执行此处

        ;;

        "值2")

          如果等于值2,则执行此处

        ;;

          ...................

        *)

          如果都没有,则默认执行此处

        ;;

        esac

  4)循环

    ⅰfor循环

      ①  for 变量 in 值1 值2 值3 .....

          do  

            程序

          done

      ②  for((初始值;循环控制条件;变量变化))

          do

            程序

          done

    ⅱ while循环

      ①

while [ 条件判断式 ]
do
程序
done

  5)I/0

    ⅰread读取控制台输入

      基本语法:

        read (选项) (参数)

      常用选项:

        -p:指定读取值时的提示符

        -t:指定读取值时等待的时间(秒)

      常用参数:

        变量:指定读取值时的变量名

  6)函数

    Shell编程和其他编程语言一样,有系统函数和自定义函数,此处介绍两个系统函数。

    ⅰ系统函数

      ①basename  

      返回完整路径最后/的部分,常用于获取文件名

      基本语法:

        basename [pathname] [suffix]

        basename [string] [suffix]

        basename命令会删除所有的前缀包括最后一个('/')字符,然后将字符串显示出来。

      选项:

        suffix为后缀,如果指定了suffix,basename会将pathname或string中的suffix去掉。

      ②dirname  

      返回完整路径最后/的前面部分,常用于返回路径部分

      基本语法:

        dirname 文件绝对路径

        从给定的文件绝对路径中去掉文件名(非目录部分),然后返回剩下的路径(目录部分)。

    ⅱ自定义函数

      ①基本语法      

[function] funname [()]
{
Action;
[return int ;]
}

      ②调用

        函数名 [值]

  

Linux Shell脚本编程的更多相关文章

  1. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  2. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  3. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  4. Linux Shell脚本编程--Linux特殊符号大全

    Linux Shell脚本编程--Linux特殊符号大全 linux_shell 特殊符号的介绍 2011

  5. Linux Shell脚本编程while语句

    Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo    uptime    sleep 3done 2,把监控结果保存 ...

  6. Linux Shell脚本编程-基础1

    概述:  shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...

  7. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  8. 【学习】Linux Shell脚本编程

    1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...

  9. [linux] shell脚本编程-xunsearch安装脚本学习

    安装脚本setup.sh #!/bin/sh # FULL fast install/upgrade script # See help message via `--help' # $Id$ # s ...

  10. Linux Shell脚本编程的注意事项

    Linux下(Shell脚本 http://www.jbxue.com/jb/shell/)编程的一些注意事项,如编程风格.命名风格等. 一.常用技巧 ssh user@server bash < ...

随机推荐

  1. python3.5和python3.6关于json模块的区别

    python3.5中 无法反序列化bytes数据必须decode成str才可以 >>> import json >>> a = b'{"username& ...

  2. 剑指Offer_编程题_18

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...

  3. nGrinder TestRunner http post json

    s nGrinder学习笔记 — post请求 https://blog.csdn.net/meyoung01/article/details/50435881 import HTTPClient.H ...

  4. jdk和jvm基本介绍

    一.JDK和JRE? 在刚入门java开发的时候,第一步都要从官网下载JDK来帮助开发,下载下来安装之后看到安装目录结构如下 bin目录:存放Java的编译器.解释器等工具(可执行文件). db目录: ...

  5. 6.适配器模式(Adapter Pattern)

    适配(转换)的概念无处不在......适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口.例如:二转换为三箱插头,将高电压转换为低电压等.    动机(Motivate):    在 ...

  6. python 深浅拷贝 for循环删除

    ###########################总结########################### 1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 a='aaaa' ls ...

  7. C#设计模式(8)——外观模式

    1.外观模式介绍 外观模式也被叫做门面模式,这种模式的作用是:隐藏系统的复杂性,并向客户端提供了一个可以访问系统的统一接口,这个统一的接口组合了子系统的多个接口.使用统一的接口使得子系统更容易被访问或 ...

  8. 信息摘要算法之一:MD5算法解析及实现

    MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有MD5实现. ...

  9. idea搭建Spring Boot+MyBatis

    需要准备的环境: idea 2017.2 jdk1.8.0_144 Maven 3.5.0 请提前将idea与Maven.jdk配置好,本次项目用的都是比较新的. 步骤: 一.首先使用idea新建一个 ...

  10. mybatis字符串转义问题

    问题描述 @Select("select * from account order by #{orderBy} #{orderRule} limit #{start},#{offset}&q ...