第一部分:Linux命令行
《Linux命令行与shell脚本编程大全》 第一章:初识Linux shell
《Linux命令行与shell脚本编程大全》 第二章:走进shell
《Linux命令行与shell脚本编程大全》 第三章:基本的bash shell命令
《Linux命令行与shell脚本编程大全》 第四章:更多的bash shell命令
《Linux命令行与shell脚本编程大全》 第五章:使用Linux环境变量
《Linux命令行与shell脚本编程大全》 第六章:理解Linux文件权限
《Linux命令行与shell脚本编程大全》 第七章:管理文件系统
《Linux命令行与shell脚本编程大全》 第八章:安装软件程序
《Linux命令行与shell脚本编程大全》 第九章:使用编辑器
第二部分:shell脚本编程基础
《Linux命令行与shell脚本编程大全》 第十章:构建基本脚本
《Linux命令行与shell脚本编程大全》 第十一章:使用结构化命令
《Linux命令行与shell脚本编程大全》 第十二章:更多的结构化命令
《Linux命令行与shell脚本编程大全》 第十三章:处理用户输入
《Linux命令行与shell脚本编程大全》 第十四章:呈现数据
《Linux命令行与shell脚本编程大全》 第十五章:控制脚本
第三部分:高级shell编程
《Linux命令行与shell脚本编程大全》 第十六章:创建函数
《Linux命令行与shell脚本编程大全》 第十七章:图形化桌面上的脚本编程
《Linux命令行与shell脚本编程大全》 第十八章:初识sed和gawk
《Linux命令行与shell脚本编程大全》 第十九章:正则表达式
《Linux命令行与shell脚本编程大全》 第二十章:sed进阶
《Linux命令行与shell脚本编程大全》 第二十一章:gawk进阶
《Linux命令行与shell脚本编程大全》 第二十二章:使用其他shell
第四部分:高级shell脚本编程主题
《Linux命令行与shell脚本编程大全》 第二十三章:使用数据库
《Linux命令行与shell脚本编程大全》 第二十四章:使用Web
《Linux命令行与shell脚本编程大全》 第二十五章:使用E-mail
《Linux命令行与shell脚本编程大全》 第二十六章:编写脚本实用工具
《Linux命令行与shell脚本编程大全》 第二十七章:shell脚本编程进阶
第五章:使用Linux环境变量
环境变量(environment variables)
1.全局变量
2.局部变量
全局变量
可见性:对shell以及shell创建的子shell都可见
系统环境变量一律使用大写字母
printenv(查看全局环境变量)
echo $变量名(查看此变量值)
局部变量
可见性:只对创建他们的shell可见
无法直接显示局部变量
set(显示为某个特定进程设置的所有环境变量,包括全局变量,剩下的为局部变量)
设置环境变量
设置局部环境变量
通过等号赋值。等号两边不可加空格
设置全局环境变量
export 变量(之后就可在当前shell以及其子shell中使用)
删除环境变量
unset 变量名(不要加$)
unset只能删除局部环境变量,父shell中的变量依然有效
默认shell环境变量
1.bash shell与Unix Bourne shell兼容的环境变量
变量 | 描述 |
CDPATH | 冒号分隔的目录列表,作为cd命令的搜索路径 |
HOME | 当前用户的主目录 |
IFS | shell用来分隔文本字符串的一系列字符 |
当前用户收件箱的文件名;bash shell会检查这个文件看有没有新邮件 | |
MAILPATH | 冒号分隔的当前用户收件箱的文件名列表;bash shell会检查列表中的每个文件来看有没有新邮件 |
OPTARG | getopts命令处理的最后一个选项参数值 |
OPTIND | getopts命令处理的最后一个选项参数的索引号 |
PATH | 冒号分隔的shell查找命令的目录列表 |
PS1 | shell命令行界面的主提示符 |
PS2 | shell命令行界面的副提示符 |
bash shell环境变量
变量 | 描述 |
BASH | 运行当前shell实例的全路径名 |
BASH_ALIASES | 当前已设置别名的关联数组 |
BASH_ARGC | 含有传给子函数或shell脚本的参数总数的可变数组 |
BASH_ ARGV | 含有传给子函数或shell脚本的参数可变数组 |
BASH_CMDS | shell执行过的命令的所在位置的关联数组 |
BASH_COMMAND | shell正在执行的命令或马上就执行的命令 |
BASH_ENV | 设置的话,每个bash脚本会在运行前先尝试运行一下这个变量定义的启动文件 |
BASH_EXECUTION_STRING | 通过bash -c选项传递过来的命令 |
BASH_LINENO | 含有当前执行的shell函数在源码中行号的可变数组 |
BASH_REMATCH | 含有模式和它们通过正则表达式比较运算符=~匹配到的子模式的只读可变数组 |
BASH_SOURCE | 含有当前正在执行的shell函数的源码文件名的可变数组 |
BASH_SUBSHELL | 当前子shell的嵌套级别,初始=0 |
BASH_VERSION | 当前运行的bash shell的版本号 |
BASH_VERSINFO | 含有当前运行的bash shell的主版本号和次版本号的可变数组 |
BASH_XTRACEFD | 若设置了有效的文件描述符(0,1,2),则'set -x'调试选项声称的跟踪输出可被重定向;通常用来将跟踪输出分出到一个文件中 |
BASHOPTS | 当前使能的bash shell选项列表 |
BASHPID | 当前bash进程PID |
COLUMNS | 当前bash shell实例所用终端的宽度 |
COMP_CWORD | 含有当前光标位置的COMP_WORDS变量的索引值 |
COMP_LINE | 当前命令行 |
COMP_POINT | 当前光标位置相当于当前命令起始位置的索引 |
COMP_KEY | 用来调用shell函数补全功能的最后一个键值 |
COMP_TYPE | 代表尝试调用补全shell函数的补全类型的整数值 |
COMP_WORDBREAKS | Readline库里做单词补全的词分隔字符 |
COMP_WORDS | 含有当前命令行所有词的可变数组 |
COMPREPLY | 含有由shell函数生成可能的填充字的可变数组 |
DIRSTACK | 含有目录栈当前内容的可变数组 |
EMACS | 设置为t时,表明emacs shell缓冲区正则工作而行编辑不能工作 |
EUID | 当前用户的有效用户ID |
FCEDIT | 供fc命令用的默认编辑器 |
FIGNORE | 冒号分隔的做文件名补全时要忽略的后缀名列表 |
FUNCNAME | 当前执行的shell函数的名称 |
GLOBIGNORE | 定义了文件名展开时忽略的文件名集合的冒号分隔模式列表 |
GROUPS | 含有当前用户属组列表的可变数组 |
histchars | 控制历史记录展开的字符,最多可有3个字符 |
HISTCMD | 当前命令在历史记录中的位置 |
HISTCONTROL | 控制哪些命令留在历史记录列表中 |
HISTFILE | 保存shell历史记录列表的文件名(默认为.bash_history) |
HISTFILESIZE | 最多在历史文件中存多少行 |
HISTIGNORE | 冒号分隔的用来决定哪些命令不存进历史文件模式列表 |
HISTSIZE | 最多在历史文件中存多少条命令 |
HOSTFILE | shell在补全主机名时读取的文件的名称 |
HOSTNAME | 当前主机的名称 |
HOSTTYPE | 当前运行bash shell的机器 |
IGNOREEOF | shell在退出前必须收到连续的EOF字符的数量。如果没有设定,默认为1 |
INPUTRC | Readline初始化文件名(默认是.inputrc) |
LANG | shell语言环境分类 |
LC_ALL | 定义一个语言环境覆盖LANG变量 |
LC_COLLATE | 设置对字符串排序时用的对照表顺序 |
LC_CTYPE | 决定着在文件名展开和模式匹配时用字符如何解释 |
LC_MESSAGES | 决定解释前置美元符($)的双引号字符串的语言环境设置 |
LC_MUNERIC | 决定着格式化数字时的语言环境设置 |
LINENO | 当前执行脚本的行号 |
LINES | 定义了终端上可见的行数 |
MACHTYPE | 用“cpu-公司-系统”格式定义系统类型 |
MAILCHECK | shell查看新邮件的频率(以秒为单位,默认值=60) |
OLDPWD | shell之前的工作目录 |
OPTERR | 设置为1时,bash shell会显示getopts命令产生的错误 |
OSTYPE | 定义了shell运行的操作系统 |
PIPESTATUS | 含有 前端进程的退出状态列表的可变数组 |
POSIXLY_CORRECT | 设置的话,bash会以POSIX模式启动 |
PPID | bash shell父进程的PID |
PROMPT_COMMAND | 设置了的话,在命令行主提示符显示之前会执行这条命令 |
PROMPT_DIRTRIM | 用来定义当启用了\w或\W提示符字符串转义时显示的尾部目录名数。删除的目录名会用一组英文句点替换 |
PS3 | select命令的提示符 |
PS4 | 如果使用了bash的-x参数,在命令行显示之前显示的提示符 |
PWD | 当前工作目录 |
RANDOM | 返回一个0~32767的随机数;对其赋值可作为随机数生成器的种子 |
REPLY | read命令的默认变量 |
SECONDS | 自从shell启动到现在的秒数;对其赋值将会重置计数器 |
SHELL | bash shell的全路径名 |
SHELLOPTS | 冒号分隔的打开的bash shell选项列表 |
SHLVL | shell的级别;每次启动一个新bash shell,值增加1 |
TIMEFORMAT | 指定了shell显示时间值的格式 |
TMOUT | select和read命令在没输入的情况下等待多久(以秒为单位),默认值为0,表示无限长 |
TMPDIR | bash shell创建临时文件的目录名 |
UID | 当前用户的真实用户ID |
不是所有默认环境变量都会在执行set命令时列出,因为有些变量没有被赋值
设置PATH环境变量
通常将“.”也加入PATH中,这样确实方便很多!
PATH=$PATH:.
定位系统环境变量
启动bash shell有三种方式
1.登录时当做默认登录shell
2.作为非登录shell的交互式shell
3.作为运行脚本的非交互shell
登录shell
会从4个不同的启动文件里读取命令,顺序依次为:
/etc/profile
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile
其中/etc/profile是系统上默认的bash shell的主启动文件,另外三个是用户专有
$HOME.profile中会检查系统上有没有$HOME/.bashrc文件,如果有则执行
交互式shell
不会访问/etc/profile,而回去检查$HOME/.bashrc
.bashrc作用:查看/etc目录下共用的bashrc;为用户提供一个定制自己的命令别名和私有脚本函数的地方
/etc/profile会设置一些环境变量,但是没有执行export
/etc/profile也会执行位于 /etc/profile.d目录下的那些应用专属的启动文件
非交互式shell
系统执行shell脚本时用这种shell
每次系统上运行脚本时会检查BASH_ENV这个变量,如果有赋值,则先执行这个变量中定义的启动文件,Linux默认没有设置此变量
可变数组
环境变量可作为数组使用
定义一个数组
$mytest=(one two three four five)
尝试打印这个数组
$echo $mytest
只输出了第一个元素
one
如果想打印整个数组
$echo ${mytest[*]}
one two three four five
打印指定的元素
$echo ${mytest[2]}
three
unset删除数组的某一项(实际上更像是把它设置为null,但是元素还在)
shell@android:/ $ unset mytest[2]
unset mytest[2]
打印数组的时候看不见three了
shell@android:/ $ echo ${mytest[*]}
echo ${mytest[*]}
one two four five
打印2号元素的时候,发现是空的,并不是four
shell@android:/ $ echo ${mytest[2]}
echo ${mytest[2]}
shell@android:/ $ echo ${mytest[3]}
echo ${mytest[3]}
four
shell@android:/ $ unset mytest
unset mytest
同样,打印整个数组时,数组还在,值都不见了
shell@android:/ $ echo ${mytest[*]}
echo ${mytest[*]}
使用命令别名
alias -p(查看已定义的别名)
其余alias用法见#1
1.《Unix & Linux 大学教程》 - 第十三章 学习笔记 使用shell:命令和定制
转贴请保留以下链接
本人blog地址
相关推荐
本文档是一份针对Shell脚本调试的学习笔记,详细介绍了几种常见的调试方法和工具,帮助运维人员快速定位并修复脚本中的问题。 首先,需要了解的是Linux与Windows在文本文件行结束标志上的差异。在Linux系统中,文本...
通过深入学习"Unix Shell编程第三版笔记",你将能够编写出高效的自动化脚本,提高工作效率,解决日常的系统管理和开发问题。同时,对Unix Shell的熟练掌握也是成为高级系统管理员或全栈开发者的必备技能之一。
Linux Shell编程是Linux系统管理与自动化任务中的重要一环,主要通过编写脚本来实现对操作系统进行交互和控制。本文将详细解析Linux Shell编程中的几个关键概念:正则表达式、find命令、grep命令以及sed命令。 1. *...
学习Linux的推荐书籍有《鸟哥的Linux私房菜》、《Linux命令行与shell脚本编程大全》、《Linux系统管理技术手册》等,这些书籍可以帮助读者深入理解Linux系统,并提供丰富的实践指导。 6. Linux视频教程第1讲:基础...
Linux Shell是Linux操作系统中的一种命令解释器,它允许用户通过命令行界面与系统进行交互,执行各种系统操作。本文档《Linux Shell从入门到精通》是作者李振良基于个人经验整理的一份全面教程,旨在帮助读者从零...
### 学习笔记-基础Shell编程 #### 一、Shell编程概述 Shell编程是指利用Shell命令语言编写脚本来实现特定功能的过程。Shell不仅是Linux操作系统下的命令行解释器,还是一种强大的脚本语言,广泛应用于自动化任务...
Linux 学习笔记是 Linux 学习的详细笔记整理,分九章,涵盖了 vim 和 vi 编辑器、实用指令、组管理和权限管理、crond 任务调度、Linux 磁盘分区挂载、网络配置、进程管理、服务管理、shell 编程等内容。 1. vi 和 ...
### Shell脚本编程知识点概述 #### 一、预备知识与基本概念 在开始Shell脚本文档的学习之前,首先需要理解Shell脚本的基本概念及其在Linux/Unix环境中的作用。Shell是一种命令行解释器,用于执行用户输入的命令,...
Shell脚本是Linux/Unix操作系统中用于自动化任务的编程语言,它基于Bash或其他Shell变体,如Sh、Csh或Ksh。本笔记将深入探讨Shell脚本的基础知识、语法特性、常用命令以及如何编写实用的脚本来提高日常工作效率。 ...
4. "ule_06.txt" - 可能介绍了第六单元的Shell脚本编程,包括基本的Shell命令,变量、条件语句、循环结构、函数定义以及如何编写自动化任务脚本。 5. "ule_9.txt" - 可能是第九单元,可能讨论了网络配置和管理,...
八、shell脚本编程 编写shell脚本可以自动化重复任务,例如: - 变量、运算符和条件判断。 - 函数定义。 - 循环结构。 - 输入输出重定向。 九、系统管理 - sysctl:调整系统内核参数。 - logrotate:日志文件轮换。...
### Redhat Enterprise Linux 5 学习笔记知识点总结 #### 一、Linux系统介绍与安装 **1. Linux的历史背景与发展** - **UNIX系统的诞生**:1970年,贝尔实验室的两位科学家发明了UNIX系统,这标志着现代操作系统的...
* Linux 的 Shell 编程:Shell 是 Linux 的命令行接口,提供了交互式的命令行环境 三、Linux 文件系统 * 文件类型:普通文件、目录文件、链接文件、设备文件等 * 文件权限:所有者、群组、其他用户的读写执行权限 ...
### Linux知识学习笔记 #### 一、Linux操作系统概述 Linux是一种开源、免费的类Unix操作系统,自1991年由芬兰学生Linus Torvalds创建以来,迅速在全球范围内获得了广泛的关注和支持。它不仅具备强大的稳定性,还...
Shell学习笔记 Shell是一种强大的命令行解释器,广泛应用于Linux和Unix系统中。它允许用户通过命令行接口执行系统任务、管理文件和编写自动化脚本。在Shell中,学习和理解变量的使用是基础,因为它们是存储数据和...
6. **Shell脚本编程**:Bash Shell是Linux最常用的Shell,学习编写简单的Shell脚本可以帮助自动化日常任务。了解变量、条件语句、循环结构以及函数的使用。 7. **系统服务与初始化系统**:了解Systemd,它是现代...
这些只是Linux学习笔记的一部分,完整的笔记还包括更多关于文件系统操作、权限管理、进程控制、网络配置、脚本编程等多个方面的内容。掌握这些基础技能是成为Linux运维人员的必备条件,通过不断的实践和学习,可以更...
Shell编程是Linux操作系统中的一种命令解释器,它允许用户通过命令行与系统进行交互,执行各种操作。在《shell编程从入门到精通》一书中,作者张昊详细讲解了shell编程的基础知识。以下是对该书内容的部分总结: 1....
1. **shell编程**:讲解Bash shell和其他Unix shell的基本语法,包括命令行参数、环境变量、重定向、管道和脚本编写等。 2. **进程管理**:介绍进程创建(fork和exec)和进程通信(管道、套接字、信号、共享内存、...
8. **Linux必学的重要命令教程**:Linux命令行是日常操作的核心,这份教程可能包含如ls、cd、mkdir、cp、mv、grep、sed、awk等常用命令的详解和实例,帮助初学者快速掌握Linux基本操作。 通过这些资源的学习,你...