shell编程规范与变量

目录

一、shell脚本基础

1.shell的作用

(1)查看本机的shell信息

 (2)linux中常见的shell

2.shell脚本的定义以及构成

(1)定义

(2)构成

3.shell脚本的应用场景

(1)重复性操作

(2)交互性任务

(3)批量事务处理

(4)服务运行状态监控

(5)定时任务执行

4.脚本执行逻辑及执行方式

(1)脚本执行逻辑

(2)执行方式

5.脚本错误

(1)脚本错误有哪些

(2)查代码的正确

(3)脚本错误常见的有三种区别

6.这里写一下一个本地搭建yum的小脚本

二、 重定向与管道符

1.交互式硬件设备

(1)标准输入:从该设备接收用户输入的数据

(2)标准输出:通过该设备向用户输出数据

(3)标准错误:通过该设备报告执行出错信息

2.  重定向操作

3.多行重定向 

4.管道符 

三、变量

1.变量基础

(1)自定义变量

(2)环境变量

(3)只读变量

(4)位置变量

(5)预定义变量

2.命名要求

(1)字符要求

(2)符号含义(这部分要记住)

(3)变量追加值

(4)read -p(键盘输入内容变为变量)

3.设置变量的作用范围

(1)设置变量范围

(2)环境变量的全局配置文件

(3)只读变量

(4) 位置变量

(5) 预定义变量

4.整数的运算

(1)expr

(2)let 

四、总结


一、shell脚本基础

1.shell的作用

     Linux系统中的Shell是一个特殊的应用程序, 它介于操作系统内核与用户之间,充当了一个“命令解释器"的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

      常见的Shell解释器程序有很多种,使用不同的Shell时,其内部指令、命令行提示符等方面会存在一些区别。 通过/etc/shells 文件可以了解当前系统所支持的Shell脚本种类。

(1)查看本机的shell信息

 (2)linux中常见的shell

          bash:基于gun的框架下发展的shell

          csh:类似c语言的shell

          tcsh:整合了csh提供了更多功能

          sh:已经被bash替换

          nologin:这个shell可以让用户无法登录

          bash (/bin/qash) 是目前大多数Linux版本采用的默认shell

2.shell脚本的定义以及构成

(1)定义

        就是将命令按顺序一--列出,最后自动执行;执行需要权限,也可以直接使用;脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本

(2)构成

①脚本申明(解释器):第一行开头"#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python#!/bin/expect

②注释信息:以#开头的语句表示为注释信息

③可执行语句:比如echo命令用于输出”“之间的字符串

3.shell脚本的应用场景

(1)重复性操作

(2)交互性任务

(3)批量事务处理

(4)服务运行状态监控

(5)定时任务执行

4.脚本执行逻辑及执行方式

(1)脚本执行逻辑

①顺序执行:程序按从上到下顺序执行

②选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行

③循环执行:程序执行过程中需要重复执行多次某段语句

(2)执行方式

①指定路径去执行文件(需要有执行权限)

[root@localhost ~]# chmod +x /root/host.sh加权限

指定相对路径./host.sh

指定绝对路径/root/host.sh

②指定解释器去执行(不需要权限)

2.指定解释器去执行(不需要权限)

[root@localh                                                         ost ~]# bash host.sh 192.168.91.1

与真机网络通顺

指定了使用bash去执行脚本不需要权限

[root@localhost ~]# . qiuhe.sh

[root@localhost ~]#source qiuhe.sh

[root@localhost ~]# source first.sh

5.脚本错误

(1)脚本错误有哪些

         ①一类命令错误命令出错不会影响接下来的命令继续

         ②语法错误

         ③逻辑错误

(2)查代码的正确

bash -n脚本名称(不在当前目录下加绝对路径)检查语法错误

bash-x脚本名称(不在当前目录下加绝对路径)逻辑错误

(3)脚本错误常见的有三种区别

①语法错误,会导致后续的命令不继续执行,可以用bash-n检查错误,提示的出错行数不一定是准确的

②命令错误,默认后续的命令还会继续执行,用bash-n无法检查出来,可以使用bash-x进行观察

③逻辑错误:只能使用bash-x进行

6.这里写一下一个本地搭建yum的小脚本

[root@localhost ~]# vim yum.sh
mv *.repo a
echo "[a]
name=a
baseurl=:file///mnt
enabled=1 
gpgcheck=0" > a.repo
yum clean all
yum install tree -y
:wq

[root@localhost ~]#bash -n yum.sh   用此命令来检测是否出错

[root@localhost ~]# bash yum.sh    进行tree这个小程序的安装

二、 重定向与管道符

1.交互式硬件设备

(1)标准输入:从该设备接收用户输入的数据

(2)标准输出:通过该设备向用户输出数据

(3)标准错误:通过该设备报告执行出错信息

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

[root@localhost ~]# ll /dev/std*
lrwxrwxrwx. 1 root root 15 10月  6 23:46 /dev/stderr -> /proc/self/fd/2 错误
lrwxrwxrwx. 1 root root 15 10月  6 23:46 /dev/stdin -> /proc/self/fd/0   输入
lrwxrwxrwx. 1 root root 15 10月  6 23:46 /dev/stdout -> /proc/self/fd/1 输出

2.  重定向操作

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

[root@localhost ~]# vim passwd.txt

123
:wq

[root@localhost ~]# passwd --stdin 123 < passwd.txt
更改用户 123 的密码 。
passwd:所有的身份验证令牌已经成功更新。

2:错误输出       &:混合        1:正确输出

3.多行重定向 

[root@localhost ~]#cat > ky15. txt
#需要回车才会写入
hhh
111
ky15
[root@Tocalhost ~]#cat >file. txt <<EOF
>111
>222
>333
>
> 444
> EOF

4.管道符 

2.2管道符
管道符
将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以叠加使用
[root@localhost opt]# ls /opt |wc
       2   2    12
修改密码
[root@localhost opt]# echo "123123" Ipasswd --stdin 123
更改用户123的密码。
passwd: 所有的身份验证令牌已经成功更新

[root@test1 ~]# grep "/bin/bash$" /etc/passwd
root:x:0:0: root: /root :/bin/bash
zhangsan:x: 1000: 1000: zhangsan: /home/zhangsan: /bin/bash
lisi :x: 1001:1001: : /home/lisi:/bin/bash

[root@testl ~]# grep "/bin/bash$" /etc/passwd | awk -F: ' {print $1,$7}
root /bin/bash
zhangsan /bin/bash
lisi /bin/bash

三、变量

保存将来会变化的数据,即使数据变化,直接调用变量即可,各种Shell环境中都使用到了”变量”的概念。Shell变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell 程序能够提供更加灵活的功能,适应性强。

1.变量基础

常见Shell变量的类型包括:

(1)自定义变量

         由用户自己定义,修改和使用

[root@localhost ~]# echo $[RANDOM % 33]        (random范围0-36767)
10                                                                             (0-33随机一个数)

(2)环境变量

         由系统维护,用于设置工作环境

(3)只读变量

        只可以读取不可以更改

(4)位置变量

        通过命令行给脚本传递参数

(5)预定义变量

        Bash中内置的一 类变量,不能知己修改

        系统内置变量:PATH, UID, HOSTNAME

2.命名要求

(1)字符要求

          区分大小写

          不能使程序中的保留字和内置变量:如:if, for, hostname

          只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线“-”,和主机名相反

          不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH

           大驼峰StudentFirstName

           小驼峰studentFirstName

           下划线:student_name

(2)符号含义(这部分要记住)

           赋值时使用双弓号("    ")可以直接调用变量

           赋值时使用单引号('  ')$只会被认为是字符$不会调用变量

           赋值时使用(“反撇在tab_上面)命令替换,提取命令执行后的输出结果$()用法相同

           { }可以分隔变量值

(3)变量追加值

格式

变量名+=追加值

[root@localhost ~]# a=b
[root@localhost ~]# a+=:wang
[root@localhost ~]# echo $a
b:wang

(4)read -p(键盘输入内容变为变量)

[root@localhost ~]# read -p "请输入一个数字:" num
请输入一个数字:888
[root@localhost ~]# echo $num
888

3.设置变量的作用范围

(1)设置变量范围

默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再作用。

可以通过内部命令export将指定的变量到处为全局变量,使用户定义的变量在说有子shell环境中可以继续使用。

格式1: export 变量名

格式2: export 变量名=变量值

(2)环境变量的全局配置文件

临时修改

[root@localhost ~]# PATH+=:/root

 永久修改

[root@localhost ~]# vim /etc/profile

在/etc/profile的文件最后加:

 不可以多次echo $PATH,会重复出现一样的shell环境

(3)只读变量

用户的变量值不允许被修改

readonly 命令设置只读变量
readonly PRODUCT                #设置为只读变量
echo $PRODUCT
PRODUCT=Python                    #只读变量不可以被重新赋值
unset PRODUCT                    #只读变量不可以被删除,unset 命令用于删除变量,但无法删除只读变量,只能重启系统解决

(4) 位置变量

       当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。

       $n:n为数字,$0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}

(5) 预定义变量

$*、$@:表示命令或脚本要处理的参数。
$*:把所有参数看成以空格分隔的一个字符串整体,代表"$1 $2 $3 $4"。
$@:把各个参数加上双引号分隔成n份的参数列表,每个参数是独立  的,代表"$1" "$2" "$3" "$4"

$0:表示当前执行的脚本或命令的名称。
$#:表示命令或脚本要处理的参数的个数。    
$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。
也常被用于Shell脚本中return退出函数并返回的退出值

4.整数的运算

(1)expr

expr只能进行整数的运算

格式: expr 变量1运算符变量2 (运算符变量3]

运算符:

(1)加法+

  [root@localhost ~]# expr 1 + 2
   3

(2)减法-

[root@localhost ~]# expr 1 - 2
-1

(3)乘法\*

[root@localhost ~]# expr 1 \* 2
2

(4)除法/

[root@localhost ~]# expr 2 / 1
2

(5)取余(取模) %

[root@localhost ~]# expr 32 / 7
4

(2)let 

案例一:

[root@localhost ~]# a=1
[root@localhost ~]# b=3
[root@localhost ~]# z=0;let z=a+b;echo $z
4

案例二:
[root@localhost ~]# i=100;j=100;  let j=i++; echo "i=$i j=$j" 
i=101 j=100
[root@localhost ~]# i=100;j=100;  let j=++i; echo "i=$i j=$j" 
i=101 j=101
(i++:先赋值,再加;++i:先加再赋值)

四、总结

今天主要讲了shell脚本的基础,希望能够帮助到大家!

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值