bash脚本编程基础及配置文件

(一)shell脚本编程

  • 编程语言的分类:
    • 根据运行方式:
      • 编译运行
      • 解释运行
    • 根据编程过程中功能的实现是调用库还是调用外部的程序文件:
      • shell脚本编程:利用系统上的命令及编程组件进行编程
      • 完整编程:利用库或编程组件进行编程
    • 根据编程模型:
      • 过程式编程:C,bash
      • 面向对象编程:Java,C++
  • shell脚本编程特性
    • 过程式编程
    • 非完整编程
    • 解释运行
  • 如何写shell脚本
    • shell脚本一般以“.sh”结尾
    • 文本编辑器
      • 类型:
        • 行编辑器:sed
        • 全屏编辑器:nano,vi,vim
      • nano:
        • 打开文件方式:nano FileName,如果文件不存在会创建
        • 快捷键的使用中,“^”表示control键
    • shell脚本是什么
      • 命令的堆积
      • 由于很多命令不具有幂等性,需要用程序逻辑来判断运行条件是否满足,以避免其运行中发生错误,例如:id NewUser || useradd NewUser
    • 脚本文件的第一行,顶格写:给出shebang/解释器路径,用于指明解释执行当前脚本的解释器程序文件
      • 常见的解释器:
        • #!/bin/bash  -->bash脚本
        • #!/bin/python  -->python脚本
        • #!/bin/perl  -->perl脚本
        • #!是shebang的固定开头格式
    • 脚本中的空白行会被解释器直接忽略,可以使用单独的echo显示空白行
    • 脚本中以#开头的行,除了shebang,其它的行都会被视为注释行
    • shell脚本的运行是通过运行一个子shell进程实现的
    • 运行脚本
      • 赋予执行权限,并直接运行此程序文件
        • chmod +x FileName
        • FileName
      • 直接运行解释器,将脚本以命令行参数传递给解释器程序
        • 此时脚本不需要执行权限,因为做为参数使用
        • bash FileName

练习:写一个脚本,完成以下功能:

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

2,显示/var目录下的所有文件和目录本身,以大写字母格式输出

3,创建临时文件/tmp/tmpfile.XXXXX

答案:

#!/bin/bash

echo "show files in /etc"

ls -d /etc/[pP]*

echo

echo "show files in /var"

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

echo

echo "create a temp file in /tmp"

mktemp /tmp/tempfile.XXXXX

  • bash的配置文件,分为两类
    • 交互式登录的shell进程:
      • 直接通过某终端输入账号和密码后登录打开的shell进程
      • 使用su命令:su - UserName,或者su -l UserName执行的登录切换
    • 非交互式登录的shell进程
      • su UserName执行的登录切换
      • 图形界面下打开的终端
      • 运行脚本
    • profile类:
      • 为交互式登录的shell进程提供配置(说法不十分准确)
      • 全局类profile:
        • 对所有用户都生效
        • /etc/profile
        • /etc/profile.d/*.sh
      • 用户个人类profile:
        • 仅对当前用户有效
        • ~/.bash_profile
      • 配置文件读取次序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc,后读的配置会覆盖之前的配置
      • 功用
        • 定义环境变量
        • 运行命令或者脚本,比如用户一登录就运行一个初始化脚本
    • bashrc类:
      • 为非交互式登录的shell进程提供配置(说法不十分准确)
      • 全局类bashrc:
        • 对所有用户都生效
        • /etc/bashrc
      • 用户个人类bashrc:
        • 仅对当前用户有效
        • ~/.bashrc
      • 配置文件读取次序:~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh,后读的配置会覆盖之前的配置
      • 功用
        • 定义本地变量
        • 定义命令别名
    • 仅管理员可以修改全局配置文件
    • 配置文件中新增的特性,只对下次登录有效,对当前shell进程无效/命令行中定义的特性,仅对当前shell进程有效,对下次登录的shell进程无效
    • 为了让配置文件中新增的特性立即生效
      • 通过命令行重复定义一次
      • 强制bash重新读取配置文件
        • 方式一:source ConfigFileName
        • 方式二:. ConfigFileName
原文地址:https://www.cnblogs.com/jacky1982/p/7633741.html