Shell脚本书写方法详解

同学给我推荐了一个关于如何书写shell脚本教程文件。

看过之后觉得受益良多,自己特意将该PDF内的内容自己总结了一份,在这里和大家分享一下。
愿所有像我一样的shell脚本的初学者能够从中受益,少走弯路。

首先,shell的作用

用户的登陆shell  登陆后默认的shell程序是: /bin/bash
不同的shell内部指令,运行环境会有所区别

常见的shell有
/bin/sh
/bin/bash
/sbin/nologin


1.编写脚本代码:
使用vi编辑器,每行一条Linux命令,按照顺序执行

2.然后赋予脚本文件可执行的属性

3.执行脚本文件的三种方法
./chao.sh
sh /chao.sh
source /chao.sh

更完善的脚本构成
脚本声明
注释信息
可执行语句

重定向操作
    类型                        操作符                      用途
重定向输入                     <                        从指定文件读取而不是从键盘输入
重定向输出                     >                         将输出文件保存到指定文件(覆盖原有内容)
                                      >>                      将输出文件保存到指定文件(覆盖原有内容)
标准错误输出                  2>                      将错误信息保存到指定的文件(覆盖原有内容)
                                      2>>                    将错误信息保存到指定的文件
混合输出                        &>                       将标准输出,标准错误的内容保存到同一文件中

管道操作符号“|”
将左侧的命令输出结果,作为右侧命令的处理对象


shell变量的作用
为灵活管理Linux系统提供的特定参数,有两层意思
变量名:使用固定的名称,由系统预设或用户定义
变量值: 能够根据用户设置,系统环境的变化而变化

变量的类型
自定义变量:由用户自己定义,修改和使用
环境变量: 由系统维护,用于设置工作环境
位置变量: 通过命令行给脚本程序传递参数
预定义变量:BASH中内置的一类变量,不能直接修改

定义一个新的变量
格式: 变量名=变量值
变量名以字母或下划线开头,区分大小写,建议全大写

查看变量的值:   echo $变量名
赋值时使用引号:
双引号:允许使用$符引用其他变量值
单引号: 禁止引用其他变量值,$视为普通字符
反撇号:命令替换,提取命令执行后的输出结果

将键盘输入内容为变量赋值
格式:   read [-p "提示信息"] 变量名

设置变量的作用范围
export 变量名
export 变量名=变量值
两种格式可以混合使用

整数变量的运算:
expr  变量1 运算符  变量2 [运算符 变量3]
常见的运算符
加法运算符 +
减法运算符: -
乘法运算符:\*
除法运算符: /
取余运算:%

整数变量的运算(2)
((变量=变量运算符变量));
等号后面的变量可以是具体数值
例子:
((a=a+3));

环境变量:
由系统提前创建,用来设置用户的工作环境
配置文件: /etc/profile       ~/.bash_profile
常见环境变量的举例

位置变量:
表示为$n, n为1~9之间的数字

预定义变量: 
/etc/passwd  /etc/shadow
例如一些服务的内置用户名或密码
如apache的启动用户就是预定义变量

条件测试操作
测试特定的 表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值
格式 : test 条件表达式
应用实例: 

                                   

                       

test -z 进行测试的时候   字符串长度为0的时候   结果才返回1
            如果变量数值为0    返回0

条件测试操作
[ 操作符 文件或目录]
[5]  部分是判断表达式,-d表示判断是否是目录
&&是”逻辑与“操作符,只有&&前面的判断成立,后面的语句才会执行
-b的意思是判断 后面的路径是否是一个目录
echo $?    表示对刚刚执行的表达式进行判断
0表示成立,1表示不成立

-e filename     如果 filename存在,则为真     [ -e /var/log/syslog ]
-d filename     如果 filename为目录,则为真     [ -d /tmp/mydir ]
-f filename     如果 filename为常规文件,则为真     [ -f /usr/bin/grep ]
-L filename     如果 filename为符号链接,则为真     [ -L /usr/bin/grep ]
-r filename     如果 filename可读,则为真     [ -r /var/log/syslog ]
-w filename     如果 filename可写,则为真     [ -w /var/mytmp.txt ]
-x filename     如果 filename可执行,则为真     [ -L /usr/bin/grep ]
filename1-nt filename2     如果 filename1比 filename2新,则为真     [ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2     如果 filename1比 filename2旧,则为真     [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string     如果 string长度为零,则为真     [ -z "$myvar" ]
-n string     如果 string长度非零,则为真     [ -n "$myvar" ]
string1= string2     如果 string1与 string2相同,则为真     [ "$myvar" = "one two three" ]
string1!= string2     如果 string1与 string2不同,则为真     [ "$myvar" != "one two three" ]
算术比较运算符
num1-eq num2     等于    [ 3 -eq $mynum ]
num1-ne num2     不等于    [ 3 -ne $mynum ]
num1-lt num2     小于    [ 3 -lt $mynum ]
num1-le num2     小于或等于    [ 3 -le $mynum ]
num1-gt num2     大于    [ 3 -gt $mynum ]
num1-ge num2     大于或等于    [ 3 -ge $mynum ]

整数值比较
格式: [ 整数1 操作符 整数2 ]

字符串比较
格式1: [ 字符串1 = 字符串2 ]
             [ 字符串1 != 字符串2 ]
格式2: [  -z 字符串 ]

逻辑测试:
格式1:  [ 表达式1 ]   操作符    [ 表达式2 ]
格式2: 命令1  操作符   命令2


if语句的结构


while语句的语法结构




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值