理论: Linux-shell编程规范与变量

一、Shell脚本概述

1.1 Shell的作用-1

■ shel的作用—命令解释器,“翻译官”

  • 介于系统内核与用户之间,负责解释命令行
    在这里插入图片描述

1.2 Shell的作用-2

■ 用户的登录Shell

  • 登录后默认使用的shell程序,一般为/bin/bash
  • 不同shell的内存指令、运行环境等会有所区别
[root@localhost -]# cat /etc/shells 
/bin/sh 
/bin/bash 
/sbin/nologi

1.3 编写第一个shell脚本-1

■ 编写脚本代码

  • 使用vim文本编辑器
  • 每行—条Linux命令,按执行顺序依次编写
[root@localhost  ]# vim first.sh 
cd /boot/ 
pwd 
Is -Ih vml*

■ 赋予可执行权限

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

1.4 编写第一个shell脚本-2

■ 执行脚本文件

  • 方法脚本文件路径(绝对路径与相对路径)
[root@ local host  ]# ./first.sh
  • 方法二:sh脚本文件路径
[root@localhost] # sh first.sh
  • 方法三:source脚本文件路径
[root@localhost] # source first.sh

1.5 编写第一个shell脚本-3

■ 更完善的脚本构成

  • 脚本声明
  • 注释信息
  • 可执行语句
[root@localhost  ]# vim /first.sh 
#!/bin/bash 
# This is my first Shell-Script, 
cd /boot 
echo "当前的目录位于:" 
pwd 
echo "其中以vml开头的文件包括: Is -lh vml*

1.6 重定向与管道操作-1

■ 交互式硬件设备

  • 标准输入:从该设备接收用户输入的数据
  • 标准输出:通过该设备向用户输出数据
  • 标准错误:通过该设备报告执行出错信息
    在这里插入图片描述

1.7 重定向与管道操作-2

■ 重定向操作
在这里插入图片描述

1.8 重定向与管道操作-3

■ 重定向操作
在这里插入图片描述

1.9 重定向与管道操作-4

■ 管道操作符号"|"

  • 将左侧的命令输出结果,作为右侧命令的处理对象
cmd | 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}’ 
root /bin/bash

二、Shell脚本变量

2.1 Shell变量的作用、类型

■ 变量的作用

  • 用来存放系统和用户需要使用的特定参数(值)
  • 变量名:使用固定的名称,由系统预设或用户定义
  • 变量值:能够根据用户设置、_系统环境的变化而变化
    ■ 变量的类型
  • 自定义变量:由用户自己定义、修改和使用
  • 特殊变量:环境变量,只读变量,位置变量,预定义变量

2.2 自定义变量-1

■ 定义一个新的变量

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

■ 查看变量的值

echo $变置名
[root@localhost ~]# Products Python 
[root@ local host ~]# Version=2.7.13 
[root@localhost ~]# echo $Product 
Python 
[root@ local host ~]# echo $Product $Version Python 2.7.13

2.3 自定义变量-2

■ 赋值时使用引号

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

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

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

2.4 自定义变量-3

■ 设置变量的作用范围

格式1: export变量名… 
格式2: export变置名=变置值...
[root@localhost  -]#  echo  "SProduct  $Version’ Benet 6.0 
[root@localhost   ]  #  export  Product  Version 
[root@localhost ~j# basK? 
[root@localhost  ~j#  echo  "SProduct  $Version Benet 6.0

2.5 自定义变量-4

■ 整数变量的运算

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

■ 常用运算符

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

2.6 特殊的Shell变量-1

■ 环境变量

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

■ 常见的环境变量

  • PWD、 PATH
  • USER、SHELL、 HOME
[root@localhost  ]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin 
[root@localhost  ]# PATH="$PATH:/root" 
iroot@localhost  j# echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/^in:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin:/root 

2.7 特殊的Shell变量-2

■ 只读变量

  • 用于变量值不允许被修改的情况
[root@localhost -]# name=cloud 
[root@localhost -]# readonly name //设置为只读变量 
[root@localhost ~j# echo $name 
cloud 
[root@localhost  ]  # name=yun 
-bash: name: readonly variable //只读变量不可以被重新赋值 [root@localhost~]# 
[root@localhost -]# unset name //只读变量不可以被删除 
-bash: unset: name: cannot unset: readonly variable

2.8 特殊的Shell变量-3

■ 位置变量

  • 表示为$n,n为1-9之间的数字
[root@localhost  ]# ./myprog.sh one two three four five

2.9 特殊的Shell变量-4

■ 预定义变量

  • $#:命令行中位置变量的个数
  • $*:所有位置变量的内容
  • $?:上一条命令执行后返回的状态,当返回状态值为o时 表示执行正常,非o值表示执行异常或出错
  • $0:当前执行的进程/程序名

■ 预定义变量

[root@localhost -]# vim mybak.sh 
#!/bin/bash 
TARFILE=beifen-'date +%s'.tgz 
tar zcf $TARFILE $* &> /dev/null 
tcho "已执行$0脚本,  " 
echo "共完成$#个对象的备份" 
echo  •具体内容包括: 
[root@localhost -]# chmod +x mybak.sh 
[root@localhost  ]# ./mybak.sh /etc/passwd /etc/shadow 已执行./mybak.sh脚本, 
共完成2个对象的备份 
具体包括:/etc/passwd /etc/shadow

猜你喜欢

转载自blog.csdn.net/weixin_44733021/article/details/107920894