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
- 交互式登录的shell进程: