Shell编程规范与使用

目录

一、Shell脚本概述

1)Shell的作用——命令解释器,“翻译官”

2)常见shell解释器

3)编程语言类型

4)Shell脚本

编写脚本代码

Shell脚本的构成

赋予可执行权限

Shell脚本的执行方法

5)重定向与管道操作

交互式硬件设备

重定向操作

管道操作符号“|”

​编辑

二、Shell脚本变量

1)Shell变量的作用、类型

变量的作用

变量的类型

2)自定义变量

定义一个新的变量

查看变量的值

赋值时使用引号

从键盘输入内容为变量赋值

设置变量的作用范围

整数变量的运算

let命令

3)特殊的Shell变量

环境变量

常见的环境变量

只读变量

位置变量

预定义变量


一、Shell脚本概述

1)Shell的作用——命令解释器,“翻译官”

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

2)常见shell解释器

  • /bin/bash:是目前大多数Linux 版本采用的默认shell
  • /bin/sh:已经被bash替换
  • /bin/csh:类似c语言的shell
  • /bin/tcsh:整合了csh提供了更多功能
  • /bin/nologin:这个shell可以让用户无法登录

3)编程语言类型

面向对象 JAVA PYTHON C++ C# GO

面向过程     C Shell

强类型语言 JAVA C C++ C# GO 编译型语言,执行钱需要先编译,允许速度快

弱类型语言 PYTHON Shell PHP 解释型语言,不需要编译即可直接执行,常用与脚

4)Shell脚本

提前将可执行的命令语句写入一个文件,顺序执行,解释器逐行解释代码 

编写脚本代码

  • 使用vim文本编辑器
  • 每行一条Linux命令,按执行顺序依次编写

Shell脚本的构成

  • 脚本申明(解释器):若第一行为 "#!/bin/bash” ,表示此行以下的代码语句是通过 /bin/bash程序来执行,#!/bin/bash 为默认解释器。还有其他类型的解释器,比如 #! /usr/bin/python、 #!/usr/bin/expect
  • 注释信息:以 "#" 开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行
  • 可执行语句:比如 echo 命令,用于输出"  "之间的字符串
[root@localhost ~]# vim first.sh

#!/bin/bash
 
#this is first shell 

echo "HelloWorld"

赋予可执行权限

  • 使脚本具有可执行属性
[root@localhost ~]# chmod +x first.sh

Shell脚本的执行方法

1)绝对/相对路径指定脚本文件运行,需要执行用户拥有执行权限x,脚本会在子shell环境中运行

2)用bash/sh 程序执行脚本文件运行,不需要执行权限,脚本会在子shell环境中运行

3)用source/.指定脚本文件运行,脚本会在当前shell环境中运行(会影响当前所在目录、变量的值 等因素)

5)重定向与管道操作

交互式硬件设备

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

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

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

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

重定向操作

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

管道操作符号“|”

  • 将左侧的命令输出结果,作为右侧命令的处理对象
cmd1 | cmd2 [……|cmdn]
[root@localhost ~]# grep "bash$" /etc/passwd

root:x:0:0:root:/root:/bin/bash

teacher:x:500:500:BENET Linux Teacher:/home/teacher:/bin/bash

[root@localhost ~]grep "bash$" /etc/passwd | awk -F: '{print $1,$7}'  
#以冒号:分割,输出第1、7个字段

root /bin/bash

teacher /bin/bash

二、Shell脚本变量

1)Shell变量的作用、类型

变量的作用

用来存放系统和用户需要使用的特定参数(值)

  • 变量名:使用固定的名称,由系统预设或用户定义
  • 变量值:能够根据用户设置、系统环境的变化而变化

变量的类型

自定义变量:由用户自已定义、修改和使用

特殊变量:环境变量,只读变量,位置变量,预定义变量

2)自定义变量

定义一个新的变量

变量名以字母或下划线开头,区分大小写,建议全大写

变量名=变量值

ps:=号两边不能有空格 

查看变量的值

echo $变量名

[root@localhost ~]# Product=Python

[root@localhost ~]# Version=2.7.13

[root@localhost ~]# echo $Product

Python

[root@localhost ~]# echo $Product $Version

Python 2.7.13

[root@localhost ~]# i=`echo "aa,bb,cc,dd"`

[root@localhost ~]# echo ${i%,*}    #从最后倒数到最短的匹配部分(%)后面的地方被删除

aa,bb,cc

[root@localhost ~]# echo ${i%%,*}   #从最后倒数到最长的匹配部分(%%)后面的地方被删除

aa

[root@localhost ~]# echo ${i#*,}    #从开头到最短的匹配部分(#)前面的地方被删除

bb,cc,dd

[root@localhost ~]# echo ${i##*,}   #从开头到最长的匹配部分(##)前面的地方被删除


dd

赋值时使用引号

双引号:会把$当作特殊符号去引用变量的值

单引号:禁止引用其他变量值,会把$等特殊符号是为普通字符去使用

反撇号:命令替换,获取里面的命令执行后的输出结果,`……`效果等同于$()

从键盘输入内容为变量赋值

read [-p “提示信息”] 变量名

#!/bin/bash
 
read -p "请输入用户名:" name
#谁来执行这个脚本,谁就给name赋值
read -s -p "请输入密码:" pass
#-s 参数可以使密码不明文显示,更加安全
#谁来执行这个脚本,谁就给pass赋值
 
useradd $name
echo "$pass" |passwd --stdin $name
#如果变量赋值不加空格,这里加不加引号没区别
#加引号可以防止一些意外出错

设置变量的作用范围

#两种格式可以混合使用

格式1:export 变量名 …

格式2:export 变量名=变量值 …
[root@localhost ~]# echo "$Product $Version"

Benet 6.0

[root@localhost ~]# export Product Version   #导出为全局变量

[root@localhost ~]# bash

[root@localhost ~]# echo "$Product $Version" #子程序引用全局变量

Benet 6.0

[root@localhost ~]# exit

永久全局变量添加

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

#最后一行加入

export Product Version

[root@localhost ~]# source /etc/profile   #当前环境立即执行,也可以重启

[root@localhost ~]# echo "$Product $Version"

Benet 6.0

[root@localhost ~]# bash                  #切换shell环境

[root@localhost ~]# echo "$Product $Version"

Benet 6.0

整数变量的运算

expr 变量1 运算符 变量2 [运算符 变量3]…

常用运算符

  • 加法运算:num1 + num2
  • 减法运算:num1 - num2
  • 乘法运算:num1 * num2
  • 除法运算:num1 / num2
  • 求模(取余)运算:num1 % num2

变量的自增/自减等操作

简写表达式完整表达式
i++i=i+1
i--i=i-1
i+=2i=i+2
i-=2i=i-2
i*=2i=i*2
i/=2i=i/2
i%=2i=i%2

let命令

let是一个用于执行算术运算的命令。它可以将一个算术表达式作为参数,并将其计算结果赋值给一个变量。let命令支持的算术运算包括加、减、乘、除、取模等

3)特殊的Shell变量

环境变量

  • 由系统提前创建,用来设置用户的工作环境
  • 配置文件:/etc/profile、~/.bash_profile

常见的环境变量

  • PATH:指定可执行程序的搜索路径
  • HOME:指定当前用户的家目录
  • LANG:指定当前系统的语言环境
  • SHELL:指定当前Shell的路径
  • PS1:指定Shell提示符的格式
  • PWD:指定当前工作目录
  • TERM:指定当前终端的类型
  • USER:指定当前用户的用户名

[root@localhost ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/root/bin

[root@localhost ~]# PATH="$PATH:/root"

[root@localhost ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/root/bin:/root

只读变量

  • 用于变量值不允许被修改的情况
[root@localhost ~]# name=cloud

[root@localhost ~]# readonly name   //设置为只读变量

[root@localhost ~]# echo $name

cloud

[root@localhost ~]# name=yum

-bash:name:readonly variable        //只读变量不可以被重新赋值

[root@localhost ~]# 

[root@localhost ~]# unset name      //只读变量不可以被删除

-bash:unset:name:cannot unset:readonly variable

位置变量

  • 表示为$n,n为1~9之间的数字
[root@localhost ~]# ./myprog.sh one two three four five six
                                 ↑                       ↑
                         $1,第1个位置参数                ↑
                                                 $6,第6个位置参数

预定义变量

# Shell常见的变量之一系统变量,主要是用于对参数判断和命令返回值判断时使用,系统变量详解如下:

$0 		当前脚本的名称
$n 		当前脚本的第n个参数,n=1,2,…9
$* 		当前脚本的所有参数(不包括程序本身)
$# 		当前脚本的参数个数(不包括程序本身)
$? 		令或程序执行完后的状态,返回0表示执行成功
$$ 		程序本身的PID号
[root@localhost ~]# vim mybak.sh

#!/bin/bash

TARFILE=beifen-`date +%s`.tgz

tar zcf $RARFILE $* &> /dev/null

echo "已完成$0脚本,"

echo "共完成$#个对象的备份"

echo "具体内容包括:$*"

[root@localhost ~]# chmod +x mybak.sh

[root@localhost ~]# ./mybak.sh /etc/passwd /etc/shadow

已执行 ./mybak.sh 脚本,

共完成2个对象的备份

具体包括:/etc/passwd /etc/shadow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值