目录
1.shell的含义
2.Shell脚本要求
a.变量命名规范
b.函数命名规范
c.脚本命名规范
d.代码风格规范
e.条件语句与循环规范
f.注释规范
3.Shell变量介绍
4.Shell准备工作
5.Shell编辑工作
6.Shell文件运行
7.运算符
a.基本语法(会一种熟练就行)
b.使用控制台输入运算
c.运算符基本语法总结
8.条件判断
a.单分支判断
b.多分支判断
是一个命令解释器,使用户通过软件界面下面的shell向Linux内核发送请求,以达到运行程序的效果
作用
用户可以使用shell来启动,修改,挂起,停止,编写运行一些程序
Shell脚本要求
变量命名规范
- 变量命名需要统一,建议使用全部大写或者驼峰法
- 避免无意义数字或数字,数字不能开头
- 全局变量和局部变量命名规则
- 变量命名需要统一,建议使用全部大写或者驼峰法
- 避免无意义数字或数字,数字不能开头
- 全局变量和局部变量命名规则
全局变量使用{ },例如${NUMBER_HOME}
- 建议合并变量时赋给一个新的变量(废话)
函数命名规范
- 函数使用单词首字母大写,或者驼峰法
- 缩写也尽量使用首字母大写
- 尽量不要超过三个单词组成
- 等号两边不能有空格
脚本命名规范
- 常规shell脚本统一使用“.sh”
- 板块命名应该代表其特性和功能,见名知意
- 板块中的脚本和二进制程序命名禁止和其他脚本和二进制程序重名
代码风格规范
- 脚本开头第一行一定要声明解释器为#!/bin/bash或者#!/bin/sh,尽量统一
- 配置文件以及函数脚本的引用如:source conf/thtpd.conf
- 主脚本过程只实现程序主干,功能尽量封装在子函数里面
- 显示函数返回值,在函数结尾显示包含return语句,并跟上返回值
条件语句与循环规范
- 尽量做到空格,规范相统一,使用同一格式
- 尽量一行一条语句,而不是“ ;”隔开
- 能简则简
注释规范
- 注释声明脚本用途,版本,依赖关系以及版本信息
- 注释应详细,缩写易忘的,应添加注释
- 注释尽量使用英文,中文有可能乱码
- 常规shell脚本统一使用“.sh”
- 板块命名应该代表其特性和功能,见名知意
- 板块中的脚本和二进制程序命名禁止和其他脚本和二进制程序重名
代码风格规范
- 脚本开头第一行一定要声明解释器为#!/bin/bash或者#!/bin/sh,尽量统一
- 配置文件以及函数脚本的引用如:source conf/thtpd.conf
- 主脚本过程只实现程序主干,功能尽量封装在子函数里面
- 显示函数返回值,在函数结尾显示包含return语句,并跟上返回值
条件语句与循环规范
- 尽量做到空格,规范相统一,使用同一格式
- 尽量一行一条语句,而不是“ ;”隔开
- 能简则简
注释规范
- 注释声明脚本用途,版本,依赖关系以及版本信息
- 注释应详细,缩写易忘的,应添加注释
- 注释尽量使用英文,中文有可能乱码
- 尽量做到空格,规范相统一,使用同一格式
- 尽量一行一条语句,而不是“ ;”隔开
- 能简则简
注释规范
- 注释声明脚本用途,版本,依赖关系以及版本信息
- 注释应详细,缩写易忘的,应添加注释
- 注释尽量使用英文,中文有可能乱码
Shell变量介绍
- 在Linux shell 中变量分为,系统变量和自定义变量
系统变量==系统定义好的,被占用的==python中的关键字
- 显示当前shell所有的变量:set
- 静态变量:不会被反复初始化,只会定义一次
shell变量定义
- 定义变量:变量=值(无空格)
- 撤销变量: unset 变量
- 声明静态变量:readonly(只读的)变量 注意:不能unset
Shell准备工作
- 新建一个文件夹(shcode)用于方便管理存放shell脚本
- 在shcode里新建(touch)一个shell文件(后缀.sh)
- 赋予该新建文件可执行命令
[root@text ~]# mkdir shcode [root@text ~]# touch shcode/hello.sh [root@text ~]# ll shcode/hello.sh -rw-r--r--. 1 root root 0 10月 16 02:52 shcode/hello.sh [root@text ~]# chmod 755 shcode/hello.sh [root@text ~]# ll shcode/hello.sh -rwxr-xr-x. 1 root root 0 10月 16 02:52 shcode/hello.sh
Shell编辑工作
任务1:输出“hello word”
- 打开shell文件后,按照规范书写代码
- Echo (回音,重复),==输出
- 将命令返回的结果赋值给变量名需要使用单反引号(左边Esc下面 ~ 下面)
格式: D=`date`
echo “date=$D”
Shell文件运行
- 相对路径运行 (需要加前缀 sh ,无需赋予脚本执行权限)
- 绝对路径运行(记忆好文件存放位置,需要提前赋予脚本可执行的权限)
运算符
基本语法(会一种熟练就行)
- $(( 运算式))
- $[运算式] == 推荐使用,因为简单不容易看错
- Expr m + n (expr运算符之间要有空格,将expr的结果赋值给某个对象,使用` `)过于繁琐且无用,放弃了,了解即可
- 从控制台输入数值进行运算,在脚本里用$1定义第一个数,$2定义第二个数,类推
- $(( 运算式))
- $[运算式] == 推荐使用,因为简单不容易看错
- Expr m + n (expr运算符之间要有空格,将expr的结果赋值给某个对象,使用` `)过于繁琐且无用,放弃了,了解即可
- 从控制台输入数值进行运算,在脚本里用$1定义第一个数,$2定义第二个数,类推
输出变量可以定义相同,同一脚本输出后自动刷新
使用第一种语法进行运算
注:等号两边千万不能有空格,固定格式为$后有两对括号
#!bin/bash #The first kind of answer=$(((1+2)*3)) answer1=$(((2+3)*4)) echo "jieguo=$answer" echo "jieguo1=$answer1"
使用第二种语法进行运算
注:等号两边不能有空格,固定格式为$后[ ],如有三层运算,同python一样括号分隔即可,会报错,但是不影响结果。
#The second way ans=$[(1+2)*3] ans1=$[((1+2)*3)/3] echo "jieguo=$ans" echo "jieguo=$ans1"
使用控制台输入运算
注:不只是可以两个数,可以多个
ans1=$[($1+$2)*$3] echo "jieguo=$ans1"
运算符基本语法总结
- 格式要正确,不要忘记$
- 输出变量可以定义一样,输出自动刷新echo
- 等号两边一定不要有空格
- 输出时用双引号
- 三阶及以上运算,通python,叠加括号即可
#!bin/bash #The first kind of answer=$(((1+2)*3)) answer1=$(((2+3)*4)) echo "jieguo=$answer" echo "jieguo1=$answer1" #The second way ans=$[(1+2)*3] ans1=$[((1+2)*3)/3] echo "jieguo=$ans" echo "jieguo=$ans1" #The fourth way ans1=$[($1+$2)*$3] echo "jieguo=$ans1"
条件判断
[ hello ](注意hello前后要有空格)
非空返回true,可以用$?验证 (0为true,>1为false)
- 字符串比较 =
- 数字与数字比较
-lt 小于(little)
-gt 大于(greater)
-eq 等于(equal)
-le 小于等于(litter equal)
-ge 大于等于(greater equal)
-ne 不等于(no equal)
3. 按照文件的权限进行判断
-r (read)
-w (write)
-x (execute)
4.按照文件类型进行判断
-f 文件存在且是一个常规的文件
-e 文件
-d 文件存在且是一个目录
单分支判断
语法:
If [ 条件判断式 ](注意判断条件两边一定要有空格,是一定)
Then (然后,如此那么)
Echo
Fi
#!bin/bash #judgment string if [ "hello"="he1lo" ] then echo "yes" fi #numeric comparison kongzhitaishuru if [ $1 -le 80 ] then echo "yes" fi #judge documents if [ -f /root/shcode/hello.sh ] then echo " yes" fi #four if [ hello ] then echo "yes" fi
多分支判断
语法:
If [ 条件判断式 ]
Then
Echo
Elif[ 条件判断式 ]
Fi
if [ hello ] then echo "yes" fi if [ $1 -ge 90 ] then echo "good" elif [ $1 -ge 80 ] then echo "pass" elif [ $1 -lt 80 ] then echo "failed" fi
for循环遍历



