笔记–8.8 shell脚本编程

shell编程注意事项

 1,指令的执行是从上而下,从左而右的分析与执行

 2,指令的下达时:指令,选项与参数之间的多个空白都会被忽略掉

 3,空白行会被忽略掉,并且tab键所推开的空白同样视为空格键

 4. 如果一行的内容太多,则可以使用『 \[Enter] 』来延伸至下一行

 5,『 # 』可做为批注,任何加在 # 后面的资料将全部被视为批注文字而被忽略

  

如果程序文件名是 /home/dmtsai/shell.sh 好了可以有底下几个执行方法:

 1,直接指令下达: shell.sh 文件必须要具备可读与可执行 (rx) 的权限,然后:

        o 绝对路径:使用 /home/dmtsai/shell.sh 来下达指令;

        o 相对路径:假设工作目录在 /home/dmtsai/ ,则使用 ./shell.sh 来执行

        o 变量『PATH』功能:将 shell.sh 放在 PATH 指定的目录内,例如: ~/bin/

 2,以 bash 程序来执行:透过『 bash shell.sh 』或『 sh shell.sh 』来执行

shell脚本编程

编程语言的分类:根据运行方式

编译运行:源代码–》编译器(编译)–》程序文件

解释运行:源代码–》运行时启动解释器,由解释器边解释边运行,速度更快

根据其编程过程中功能的实现是调用库还是调用外部的程序文件

shell脚本编程

利用系统上的命令及编程组建进行编程

完整编程:

利用库或编程组件进行编程

编程模式:过程式编程语言,面向对象的编程语言

程序=指令+数据

过程式:以指令为中心来组织代码,数据是服务于代码

  顺序执行

  选择执行

  循环执行

  代表:C,bash

对象式:以数据为中心来组织代码,围绕数据来组织指令

  类(class):可被实例化对象,操作 组成

  代表:Java,C++,Python

 

  shell脚本编程:过程式编程,解释运行,依赖于外部程序文件运行

  如何写shell脚本

  脚本的第一行,顶格:给出shebang解释器路径,用于指明解释执行当前脚本的解释器程序文件

  常见的解释器:

  #!/bin/bash

  #!/use/bin/python

  #!/usr/bin/perl

  文本编辑器:nano

  行编辑器:sed

  全屏幕编程器:nano vim

shell脚本是什么?

命令的堆积:    

但很多命令不具有幂等性,需要用程序逻辑来判断运行条件是否满足,以避免其运行中发生错误,并不是所有错误都会影响脚本的运行 

运行脚本

1,赋予执行权限,并直接运行此程序文件

 chmod +x /PATH/TO/SCRIPT_FILE

2,直接运行解释器,将脚本以命令参数传递给解释器程序

 bash /PATH/TO/SCRIPT_FILE

注意:脚本中的空白行会被解释器忽略,不会显示空白行,如果想显示,就在该行输入echo就可以了

 脚本中,除了shebang,余下所有以#开头的行,都会被视作注释行而被忽略,不会显示出来,此即为注释行

 shell脚本的运行时通过运行一个子shell进程实现的

练习:写一个脚本,实现如下功能

    1,显示/etc目录下所有以大写P或小写p开头的文件或目录本身

    2,显示/var目录下的所有文件或目录本身,并将显示结果中的小写字母转换为大写后显示

    3,创建临时文件/tmp/myfile.XXXX

   

    #!/bin/bash

  ls -d /etc/[pP]*

ls -d /var/* |tr 'a-z'  'A-Z'

mktemp /tmp/myfile.XXXX

bash的配置文件:

两类

profile类:为交互式登陆的shell提供配置

bashrc类:为非交互式登录的shell进程提供配置

登陆类型

交互式登录的shell进程

直接通过某终端输入账号和密码后登陆打开的shell进程

使用su命令:su -USERNAME或使用  su-L USERNAME执行的登陆切换

非交互式登录shell进程

su USERNAME执行的登陆切切换

图形界面下打开的终端

运行脚本(bash运行脚本,脚本中包含shell,就是子shell)

profile类

全局:对所有用户都生效

/etc/profile

/etc/profild.d/*.sh

用户个人:仅对当前用户有效

~/.bash_profile

功用;

1,用于定义环境变量

2,运行命令或脚本

bashrc类

全局:

/etc/bashrc

用户个人

~/.bashrc

功用:

1,定义本地变量

2,定义命令别名

注意:仅管理员可修改全局配置文件

配置文件的读取次序

交互式登录shell进程(登录系统)

/etc/profile–>/etc/profile.d/* –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc

非交互式登录shell进程(脚本)

~/.bashcr –> /etc/bashrc –> /etc/profile/d/*

命令行中定义的特性,例如变量和别名作用域为当前shell进程的生命周期

配置文件定义的特性,只对随后新启动的shell进程有效

让通过配置文件定义的特性立即生效

1,通过命令行重复定义一次

2,让shell进程重读配置文件(在.bashrc新定义的alias不会立即生效,采用下面两种方法)

 ~]# source /PATH/FROM/CONF_FILE

 ~]# ./PATH/FROM.CONF_FILE

原创文章,作者:wutianyou,如若转载,请注明出处:http://www.178linux.com/31749

(0)
wutianyouwutianyou
上一篇 2016-08-12
下一篇 2016-08-12

相关推荐

  • 关于大型网站技术演进的思考(十二)–网站静态化处理—缓存(4)

    原文出处: 夏天的森林   上篇我补充了下SSI的知识,SSI是一个十分常见的技术,记得多年前我看到很多门户网站页面的后缀是.shtml,那么这就说明很多门户网站都曾经使用过SSI技术,其实现在搜狐网站也还在用shtml,如下图所示: 由此可见SSI在互联网的应用还是非常广泛的。其实互联网很多网页如果我们按照动静分离策略拆分,绝…

    2015-03-11
  • 搭建yum仓库的FTP服务器

    搭建centos7ftp服务

    2017-12-02
  • 磁盘管理

    CHS cylinder-head-sector cylinder柱面=track*head=512*63*256=8M  磁盘分区 为什么是分区? • 优化I/O 性能 • 实现磁盘空间配额限制 • 提高修复速度 • 隔离系统和程序 • 安装多个OS • 采用不同文件系统   MBR:使用32位表示扇区数量,按每扇区512字节计算,每个…

    Linux干货 2016-08-29
  • 文件管理命令及文件名通配

    Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 目录管理类的命令 mkdir 用法: mkdir [选项]… 目录… 选项:  -p 递归创建多个目录 实例: [root@centos7 ~]# mkdir -p /tmp/jerry/2016/…

    Linux干货 2016-11-06
  • Liunx学习第一周之对目录及文件的操作总结

            Liunx学习的第一周已经结束,回顾这一周的学习,已经对Linux的发展历史有了初步的了解,也在老师的指导下成功的在虚拟机上安装了两个Liunx系统:centos6和centos7,然后在这两个Liunx系统的CLI模式下输入一个个命令,让系统执行各种任务,下面是第一周学习的几种命令的总结。 &nbsp…

    2017-07-15
  • N25-第5周博客作业

    N25-第5周博客作业 1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; grep -E "^[[:space:]]+[[:alnum:]]+" /boot/grub/grub.conf    grep "^[[:space:]]…

    Linux干货 2016-12-31

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-12 14:50

    对脚本基础总结的较为详细,但是脚本更应该注重实战,而不是停留在理论哦,只有多看,多谢,才能写出优秀的脚本哦,