本节我们一起来看一下shell的编程,可能讲的不是非常全,希望大家可以一起讨论补充。
我将根据以下几个步骤对shell的编程语法进行讲解:
u 脚本简单介绍
u 变量
u 算术运算
u 交互式编程
u 选择判断
u 条件测试
u 循环
u 函数
脚本简单介绍
在讲这些语法格式之前我们先对脚本进行简单的了解。
1、书写格式
第一行,顶格:以下为例
#!/bin/bash
#!/usr/bin/python
上边2个是两种不同编程语言的开头,一个是bash,一个是python,使用哪种语言开头这里就用哪种语言。
其它的以#开头的行均为注释,会被解释器忽略。
2、执行与检测
Bash [option] file -n: 语法测试
#bash -n ping.sh 即对ping.sh进行语法检测,如不报错,则语法真确 -x: 模拟单步执行
#bash -x ping.sh 可以显示该脚本执行中的每个步骤 变量
变量定义规则:
1、不能使用程序中的关键字(保留字)
2、变量名只能包含字母、数字、下划线,且不能以数字开始
3、最好做到见名知意
bash变量类别:
1、本地变量:对整个脚本进程或整个bash进程有效。
2、环境变量:当前shell进程及其子进程。
3、局部变量:只对当前的代码段有效。
4、位置变量:$n即为第n个位置变量 $1, ..., $n, ${10}
5、特殊变量:bash内置的变量
$?:上一个命令执行的返回值
$#: 传递给脚本参数的个数
$*
$@:引用传递给脚本的所有参数
变量的赋值
格式:变量名=值
VARNAME=VALUE
变量引用 :${VAR_NAME}
双引号"": 弱引用,里面的变量会被替换;
单引号'' : 强引用,里面的所有字符都是字面量,直接输出;
变量的撤销 :unset VAR_NAME
算术运算
算术运算 :bash会对数字执行隐式的类型转换
let VAR_NAME=Integer_Value
declare -i Var_Name=Integer_Value
注意:即使没有定义为整型变量,字符型的数字依然可以参与算术运算;bash会执行变量类型的隐式类型转换;
运算操作符 :+, -, *, /, %(取模), **(次方)
bash的算术运算的方式:
let Var_Name=EXPRESSION
例如
$[EXPRESSION]
例如
$((EXPRESSION))
例如
命令:expr ARG1 OP ARG2
例如
交互式编程
格式:read option “交互时的提示信息” 参数(交互时输入的值)
option:
-p :直接指定一个变量接受参数
-t :timeout ,指定等待接受参数的时间
下面我们来一个简单示例:创建一个脚本
#!/bin/bash
#
read -p "Please input a user :" us
echo $us
执行该脚本:会出现交互,我输入了一个hello.
[root@mwj87v5 scripts]# bash test5.sh
Please input a user :hello
hello
选择判断
if语句
(1)单分支的if语句:
if 测试条件; then
选择分支
fi
表示条件测试状态返回值为值,则执行选择分支;
(2)双分支的if语句:
if 测试条件; then
选择分支1
else
选择分支2
fi
两个分支仅执行其中之一。
练习:通过命令行给定一个文件路径,而后判断:
如果此文件中存在空白行,则显示其空白行的总数;
否则,则显示无空白行;
我们对/etc/fstab文件进行测试
注意:如果把命令执行成功与否当作条件,则if语句后必须只跟命令本身,而不能引用。
(3)分支的if语句:
if 条件1; then
分支1
elif 条件2; then
分支2
elif 条件3; then
分支3
...
else
分支n
fi
练习:传:递一个用户名给脚本
如果此用户的id号为0,则显示说这是管理员
如果此用户的id号大于等于500,则显示说这是普通用户
否则,则说这是系统用户;
case语句
当有多个测试条件时,case语句会使得语法结构更明晰
用法格式:
case 变量引用 in
PATTERN1)
分支1
;;
PATTERN2)
分支2
;;
...
*)
分支n
;;
esac
PATTERN:类同于文件名通配机制,但支持使用|表示或者;
a|b: a或者b
*:匹配任意长度的任意字符
?: 匹配任意单个字符
[]: 指定范围内的任意单个字符
例如:用户键入字符后判断其所属的类别;
条件测试
条件测试根据比较时的操作数的类型可以分为以下3类:
整型测试:整数比较
字符测试:字符串比较
文件测试:判断文件的存在性及属性
整型测试
格式:[ $num1 比较符 $num2 ]
比较符
-gt大于-lt小于-ge大于等于-le小于等于-eq等于-ne不等于 字符串测试
格式:[[ "$str1" 比较符 "$str2" ]]
比较符:
双目
>
<
>=
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com