编程语言的分类
- 根据运行方式分为两类
【1】编译运行:源代码需要有编译器编译转换为程序文件 【2】解释运行:源代码,运行时启动解释器,由解释器边解释边运行 - 编译运行速度更快
- 根据其编程过程中功能的实现是调用库还是调用外部的程序文件分为两类:
【1】shell脚本编程:利用系统上的命令及编程组件进行编程 【2】完整编程:利用库或编程组件进行编程 - 根据编程模型分为两类,程序=指令+数据
【1】过程式编程语言:以指令为中心来组织代码,数据服务于代码 顺序执行 选择执行 循环执行 C语言、bash shell是面向过程的编程语言 【2】面向对象的编程语言:以数据为中心来组织代码,指令服务于数据,围绕数据来组织指令 类(class):实例化对象,method(能够对对象所额外施加的操作); 代表:Java、C++、Python C++和Python既支持过程式也支持对象式的编程语言
shell脚本编程
特性
shell脚本是什么
整个shell脚本就是堆起来的命令,但很多命令不具有幂等性,需要用程序逻辑来判断运行条件是否满足以避免其运行中发生错误 单个运行命令,命令出错可以人工判断,但在脚本运行过程中出错则不会修正,即如果遇到一个命令错误,整个脚本就终止了
如何写shell脚本
- 脚本文件的第一行,顶格写,给出shebang,解释器路径,用于指明解释执行当前脚本的解释器程序文件
常见解释器: #!/bin/bash #!/usr/bin/python #!/usr/bin/perl 补充:文本编辑器分为两类: 【1】行编辑器:sed 【2】全屏幕编辑器:nano、vi、vim 要想执行,【1】给明绝对路径【2】放在PATH环境变量中
运行脚本
shell脚本的运行是通过运行一个子shell进程实现的 【1】赋予执行权限,并直接运行此程序文件
chmod +x /PATH/TO/SCRIPT_FILE
/PATH/TO/SCRIPT_FILE
【2】直接运行解释器将脚本以命令行参数传递给解释器程序
bash /PATH/TO/SCRIPT_FILE
注意:脚本中的空白行会被解释器忽略;脚本中,除了shebang,余下的所有以#开头的行都会被视作注释行而被忽略;
练习:写一个脚本,实现如下功能:
【1】显示/etc目录下所有以大写p或小写p开头的文件或目录本身 【2】显示/var目录下的所有文件或目录本身,并将显示结果中的小写字母转换为大写字母后显示 【3】创建临时文件/tmp/myfile.XXXX
nano test.sh
echo "Show some under /etc"
ls -d /etc/[pP]*
echo "Translate lower to upper"
ls -d /var/* | tr 'a-z' 'A-Z'
echo "Create a temp file"
mktemp /tmp/myfile.xxxx
bash test.sh
bash的配置文件
bash的配置文件分为两类:
【1】profile类:为交互式登录的shell进程提供配置 【2】bashrc类:为非交互式登陆的shell进程提供配置
登录类型
【1】交互式登录shell进程: - 直接通过某终端输入账号和密码后登录打开的shell进程 - 使用su命令:su -USERNAME,或者使用su -| USERNAME执行的登陆切换 【2】非交互式登录shell进程: - su USERNAME执行的登陆切换 - 图形界面下打开的终端 - 运行脚本
配置文件特性
profile类
分类
【1】全局:对所有用户都生效 /etc/profile /etc/profile.d/*.sh 【2】用户个人 ~/.bash.profile
功用
【1】用于定义环境变量 【2】运行命令或脚本
bashrc类
分类
【1】全局:/etc/bashrc 【2】用户个人:~/.bashrc
功用
【1】定义本地变量 【2】定义命令别名 注意仅管理员可修改全局配置文件
配置文件读取次序
用户个人定义的可覆盖全局强行塞给他的
- 对于交互式登录shell进程:
/etc/profile→/etc/profile.d/*→ ~/.bash.profile→ ~/.bashrc → /etc/bashrc 注:登陆系统在运行时取决于以上文件,而且依次加载 - 非交互式登录shell进程:
~/.bashrc→/etc/bashrc→etc/profile.d/* 注:自己编写的脚本在运行时其环境是取决于这三个文件 注意: - 在命令行中定义的不会永久有效,但在配置文件中定义的不会立即有效,对于配置文件中定义的只对下一次新登陆的shell进程有效,对老shell进程无效
- 命令行中定义的特性,例如变量和别名作用域为当前shell进程的生命周期;配置文件定义的特性仅仅对随后启用的shell进程有效
- 如何通过配置文件定义的特性立即生效???
【1】通过命令行重新定义一次 【2】让shell进程重读配置文件
source /PATH/FROM/CONF_FILE
. /PATH/FROM/CONF_FILE
练习:如何定义别名,cls=clear,且定义后想让他永久有效
nano .bashrc
alias cls='clear'
. .bashrc
|