简介
Shell 编程跟 python、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Kernel → 是计算机运行的核心
如果我们想让计算机执行命令,肯定需要向内核发送指令
shell → 外壳
为了更好的去控制内核 我们在内核的外面加了一个壳去接受用户的指令
内核随着时间的发展有很多的分支
Linux 的 Shell 种类众多,常见的有: Bourne
Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
- 我们关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash
- 也是大多数Linux 系统默认的 Shell。
- 在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
- 我们只需要关注 sh 和 bash即可
- 上面两个的文件后缀都是.sh
编写sh文件
文件第一行为 声明
#! /bin/bash
后面书写其他代码
执行shell的方式
方式一 ---- ./文件名.sh
./xxx.sh
- 执行的必须是一个以.sh结尾的可执行文件
- 可通过指令调整权限 — chmod u+x xxxxx.sh
- 添加xxxxx.sh文件的执行权限
- ./ 方式 会开启一个子进程执行脚本 非export方式会丢失变量
- export : 可以将当前进程的变量传递给子进程去使用
- (以后配置变量前面添加export)
方式二 ---- sh 文件名.sh
sh xxxxx.sh
--执行的文件可以是一个普通文件
source xxxxx.sh
--直接在当前进程执行脚本 对参数无影响
shell的语法
变量
定义变量
变量名 = 变量值
your_name="runoob.com"
引用变量
name=$your_name
export : 可以将当前进程的变量传递给子进程去使用 将来配置profile的时候 所有的变量前必须加export
传递参数
编写接收参数的脚本
vim test.sh
#!/bin/bash
echo "第一个参数:$1";
echo "第二个参数:$2";
写完脚本后要赋予它可执行的权限
chmod 700 test.sh
执行脚本
./test.sh 1 2
数组
编辑数组
执行脚本
特殊字符 ---- `` (与~同个按键位置的符号)
被它括在里面的代码可以当做命令去执行
运算符
这里只简单例举几个
&& 短路与
当第一个表达式为false,后面的表达式将不再执行
||短路或
当第一个表达式为true,后面的表达式将不再执行
yum info ntp > /dev/null 2>&1 && echo “ok”
条件判断语句
循环语句
函数
[ function ] funname [()]
{
action;
[return int;]
}
说明:
• 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
• 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
#!/bin/bash
demoFun(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
输出结果
-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----
带有return语句的函数:
#!/bin/bash
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
函数参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
#!/bin/bash
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第九个参数为 $9 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
输出结果:
第一个参数为 1 !
第二个参数为 2 !
第九个参数为 9 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
注意, 10 不 能 获 取 第 十 个 参 数 , 获 取 第 十 个 参 数 需 要 10 不能获取第十个参数,获取第十个参数需要 10不能获取第十个参数,获取第十个参数需要{10}。当n>=10时,需要使用${n}来获取参数。