案例驱动 :从入门到掌握 Shell 编程详细指南
阅读提示:阅读本文大约需要 15 分钟,本文结合了众多的实操案例,从入门到掌握 shell 编程,学习起来花费时间较久,建议收藏起来慢慢学习。
一、概述
Shell 是一个==命令行解释器==,接收应用程序用户命令,去调用操作系统的==内核==。它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令。它的特点是易编写、非常灵活。
Shell 解析器
Linux 提供的 Shell 解析器有如下几种:
在 centOS 中默认的解析器为bash
二、入门案例
==shell 脚本以#!/bin/bash
开头(指定解析器)==
案例:创建一个 Shell 脚本,输出 hello shell
第一步:编写 shell 脚本
首先创建一个helloShell.sh
脚本文件,然后输入如下内容
第二步:运行 shell 脚本
第一种:采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本权限)
第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限)(没有给权限就会出现如下错误)
首先要赋予 helloworld.sh 脚本的+x 权限
然后重新运行
案例:在
/root/Test
路径下创建一个zhangsan.txt
的文件,然后给文件中增加“ I love shell”.
具体实现如下:
测试运行成功:
三、Sell 中的变量
系统变量
常用系统变量$HOME、$PWD、$SHELL、$USER
等
自定义变量
基本语法
定义变量:
变量=值
撤销变量:
unset 变量
声明静态变量:
readonly变量,注意:不能unset
其他说明
变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
等号两侧不能有空格
在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算
变量的值如果有空格,需要使用双引号或单引号括起来
案例:1、定义变量 S2、撤销变量 S3、声明静态的变量 A=2
补充:把变量提升为全局环境变量,可供其他 Shell 程序使用。语法:export 变量名
案例:使用 shell 脚本输出变量 B
特殊变量
$n
0 代表该脚本名称,9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 ${10})
案例:输出该脚本文件名称、输入参数 1 和输入参数 2 的值
$#
$# (功能描述:获取所有输入参数个数,常用于循环)
案例:获取输入参数的个数
$*
(功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@
(功能描述:这个变量也代表命令行中所有的参数,不过 $@把每个参数区分对待)
案例:打印输入的所有参数
$?
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
案例:判断 helloShell.sh 脚本是否正确执行
四、运算符和条件判断
运算符
基本语法
“$((运算式))”或“$[运算式]”
expr + , - , *, /, % 。==注意:expr 运算符间要有空格==
案例:使用
expr
1、计算 3+2 的值
2、计算 2+3x4
案例:使用 $符号计算 2+3 乘 4
条件判断
基本语法
常用判断条件
两个整数之间比较
案例:比较 2 大于 1
按照文件权限进行判断
案例:helloShell.sh 是否具有写权限
按照文件类型进行判断
案例:
/root/Test/helloShell.sh
目录中的文件是否存在
五、流程控制
if
基本语法
注意事项:
[ 条件判断式 ],中括号和条件判断式之间必须有空格
if 后要有空格
案例:输入一个数字,如果是 1,则输出 the number is 1,如果是 2,则输出 the number is 2,如果是其它,什么也不输出。
case
基本语法
注意事项:
case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
双分号“;;”表示命令序列结束,相当于 java 中的 break。
最后的“*)”表示默认模式,相当于 java 中的 default。
案例:输入一个数字,如果是 1,则输出 the number is 1,如果是 2,则输出 the number is 2,如果是其它,输出 other number。
while
基本语法
案例:从 1 加到 100
for
案例:1、打印所有输入参数
2、从 1 加到 100
六、读取控制台输入内容
基本语法
案例:提示 5 秒内,读取控制台输入的名称
七、函数
系统函数
basename 基本语法
案例:截取该
/root/Test/helloShell.sh
路径的文件名称
dirname 基本语法
案例:获取
helloShell.sh
文件的路径
自定义函数
基本语法
补充说明:
必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一样先编译。
函数返回值,只能通过 $?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255)
案例:计算两个输入参数的和
版权声明: 本文为 InfoQ 作者【百思不得小赵】的原创文章。
原文链接:【http://xie.infoq.cn/article/c4bcc5e2fa7f7c958405a22ef】。文章转载请联系作者。
评论