笔记–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 09:01
下一篇 2016-08-12 09:01

相关推荐

  • 循环的特殊用法及函数

    while特殊用法 while read 变量名;do 循环体 done<文件路径(将文件中的每一行依次读入循环体,赋值给变量)   (())可以实现C语言风格的变量操作 for循环特殊格式 for((控制变量初始化;条件判断表达式;控制变量修正表达式)) do 循环体 done 控制变量初始化仅在循环开始时执行一次,进行条件判断成立后执行循…

    Linux干货 2016-08-21
  • Mariadb数据库复制系列(一):主从复制

      实验一:MySQL主从复制的实现 1、实验环境 确保各节点之间的时间同步 2、修改主节点的mysql服务配置文件,让其符合主从架构中主节点的要求 3、查看主节点现有数据情况和二进制日志使用情况 4、对主节点的数据利用xtrabackup进行完全备份 由于两个从节点是后期加入,故采取备份主节点的数据,还原到从节点上,然后让从节点从备份时刻的二进制日志的位置…

    2016-11-24
  • N26-第七周

    1、创建一个10G分区,并格式为ext4文件系统;   (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@localhost ~]# fdi…

    Linux干货 2017-03-05
  • 破坏grub实验之二

    删除/etc/fstab和/boot和grub的stage1阶段 [root@localhost ~]# rm -rf /boot [root@localhost ~]# rm -rf /etc/fstab  [root@localhost ~]# …

    Linux干货 2016-09-28
  • 磁盘分区管理之磁盘基础知识1

    1、磁盘基础知识 1.1 磁头 磁头是利用气流漂浮在盘片上,并没有接触到盘片,因而可以在各轨间高速来回移动,但如果磁头距离盘片太高,读取的信号就会太弱;太低又会磨到盘片表面,所以盘片表面必须相当光滑平整,任何异物和尘埃均会使得磁头摩擦到表面而造成数据永久性损坏。 硬盘读写磁头为了能在磁盘表面高速来回移动读取数据,则需漂浮在磁盘表面上,但是不能接触,接触就会造…

    Linux干货 2016-09-07
  • Centos 5\6的启动流程简介

     Centos 5\6的启动流程简介图如下  第三步说明:磁盘的第一个扇区512字节的前446是bootloader,与此446字节与grub Stage1的446字节是一样的,主要功能是加载/boot/grup/目录下的文件     stage1.5加载相应用的文件系统文件并识别,如ext系列使用的e2fs…

    Linux干货 2016-06-03

评论列表(1条)

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

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