什么是shell?
Shell是一个应用程序,它连接了用户和Linux内核,让用户能够更加高效、安全、低成本地使用Linux内核,这就是Shell的本质。
shell与Linux系统关系图
shell也能够编程
- 有if...else选择结构,case...in 开关语句,for、while、until循环
- 变量、数组、字符串、注释、加减乘除、逻辑运算等概念;
- 函数,包含用户自定义的函数和内置函数(例如printf\export\eval等)
shell在运维中的地位
下面手链形象地展示了Shell在运维工作中的地位
先看一个简单的shell程序
#!/bin/bash # This is to show what a example looks like. echo "This first example" echo # This inserts an empth line in output. echo "We are currently in the following directory" pwd echo echo "This directory contains the following files" ls
注释:
#!/bin/bash #!跟shell命令的完全路径。作用:显示后期命令以哪种shell来执行这些命令。如不指shell,以当前shell作为执行的shell
# shell 中以#开头表示,整行就被当作一个注释。执行时被忽略。
总结:
创建shell程序的步骤
第一步:创建一个包含命令和控制结构的shell文件 第二步:修改这个文件的权限使它可以执行,使用chmod u+x 第三步:执行 方法一:./{文件名} 方法二:使用决定路径 /root/../{文件名} 方法三:bash {文件名}
Shell变量
变量是shell传递数据的一种方法。变量使用来表示每个值的符号名
例:x=1
Shell 有两种变量:临时变量和永久变量。
临时变量:是shell程序内部定义的,其使用范围仅限于定义它的程序,对于其它程序不可见。
永久变量:是环境变量,其值不随shell脚本的执行结束而消失。
例:如:$PATH
# 用作运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找
用户定义变量:由字母或下划线打头。由字母、数字或下划线组成,并且大小写字母意义不同。变量名长度没有限制。
使用变量值时,要在变量名前加上前缀“$”。
例如:1VAR 就是非法变量。
变量赋值:赋值号“=”两边应没有空格。
例如:A=123
例如:将一个命令的执行结构赋值给变量
可以利用变量和其它字符组成一个新的字符串。
列出所有变量
set
过滤
给变量赋值多个单词
单引号和双引号的区别
单引号之间的内容原封不动地指定给了变量,
双引号取消了空格的作用,保留特殊符号的含义
双引号:
单引号:
删除变量
位置变量和特殊变量
位置变量:Shell 解释执行用户命令时,将命令行的第一个字作为命令名,而其它名字作为参数。由出现在命令行上的位置确定的参数称为位置参数。
特殊变量:有些变量是一开始执行Script脚本时就会设定,且不能被修改,但我们不叫它只读系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,以下是一些特殊变量
$*:这个程序的所以参数 $#:这个程序的参数个数 $$:这个程序的PID $!:执行上一个后台程序的PID $?:执行上一个指令的返回值
程序例子:
#!/bin/bash echo "$* 表示这个程序的所以参数" echo "$# 表示这个程序的参数个数" touch /tmp/a.txt echo "$$ 表示当前程序的ID" touch /tmp/b.txt & echo "$! 执行上一个后台指令的PID" echo "$$ 表示程序的进程ID"
结果:
变量的使用:
#!/bin/bash var1="abcd efg" echo $var1 var2=1234 echo "The value of var2 is $var2" echo $HOME echo $PATH echo $PWD
执行结果: