1.shell的概念
2.Shell脚本应用场景
1.用户的登录shell
1.检查一下/etc/shells这个文件,里面就是Linux所包含的Shell
2.最常用的就是bash、tcsh、csh、sh、nologin这些shell。这些shell都是依据Linux发展者的不同所创造出的不同版本。
1.脚本申明(解释器):若第一行为"#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#! /usr/bin/python、#!/usr/bin/expect。
2…注释信息:以"#“开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。
3.可执行语句:比如echo命令,用于输出”"之间的字符串
示例
vim /root/first.sh (.sh一般是shell脚本)
#!/bin/bash (申明一下解释器)
# This is my first Shell-Script. (注释一下:这是我第一个脚本)
cd /boot (切换目录)
echo “当前的目录位于:”
pwd
echo“其中vm1开头的文件包括:”
ls -lh vm1
1.编写脚本代码
1.方法一:
2.方法二:
如图
注:source和.会影响到当前的shell环境,他会把脚本和shell放在同一个环境去执行,其他的仅仅在脚本的shell环境中执行.
将管道符号"|"左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。
#重定向
交互式硬件设备
类型 | 设备 | 文件描述编号 | 默认设备 |
---|---|---|---|
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
重定向操作
类型 | 操作符 | 用途 |
---|---|---|
重定向输入 | > | 从指定的文件读取数据 |
重定向输出 | > | 将标准输出结果保存到指定的文件,并且覆盖原有内容 |
重定向输出 | >> | 将标准输出结果追加到指定的文件的尾部,不覆盖原有内容 |
标准错误输出 | 2> | 将错误信息保存到指定的文件,并且覆盖原有内容 |
标准错误输出 | 2>> | 将错误信息追加到指定的文件的尾部,不覆盖原有内容 |
混合输出 | &> | 将标准输出、标准错误保存到同一文件中 |
混合输出 | 2>&1 | 将标准错误输出重定向到标准输出 |
变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量的类型
自定义变量:由用户自己定义、修改和使用
特殊变量:环境变量,只读变量,位置变量,预定义变量
1.定义一个新的变量
2.查看变量的值
4.从键盘输入内容为变量赋值
方法一:
默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用。
可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子shell环境中能够继续使用
格式:
可以使用pstree命令查看shell环境,输入bash命令进入子shell环境
按ctrl十D组合键或输入exit 命令退出子shell环境
export product version #导出为全局变量
bash
echo “$product $version” #子程序引用全局变量
注:默认情况下shell环境下只能整数运算
常用的运算表达式:
echo $PATH #查看当前搜索路径
PATH="$PATH:/root" #将/root目录添加到搜索路径
export PATH="PATH:/root" #输出为全局环境变量
first.sh
环境变量的全局配置文件为/etc/profile,在此文件中定义的变量作用于所有用户。每个用户还有自己的独立配置文件(~/.bash profile)。
可以用来长期变更或设置某个环境变量
如图:
vim /root/ .bash profileexport
HISTSIZE=200 #修改root用户的历史命令记录条数
echo $HISTSIZE
source /root /bash_ profile #读取并执行文件中的设置
echo $HISTSIZE
product=benet
readonly product #设置为只读变量
echo $product
product=accp #只读变量不可以被重新赋值
unset product #只读变量不可以被删除,unset命令用于删除变量
1.当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量
2.$ n: n为数字,$ O代表命令本身,$ 1-$ 9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为${10}
示例
建立一个脚本
编辑变量 $1到 $10
给他一个可执行权限
可以开到位置变量都显示出来了
我们把10 改成30,显示还是10,是因为这里不是10,是1+0的位置变量
我们在进去脚本我想启动第10个位置变量需要在10上加上一个大括号
我在查看一下,位置10变量变成了30
我们这里再设置一个0
这里最后执行命令是命令本身
我们从新设置变量,位置1给num1,位置2给num2
sum这个变量的变量值代表位置1和位置2的相加值
我们再查看一下
我们再这样新设置变量
在查看一下
示例:
我们再写一个脚本
在写一个脚本
查看一下,变量值一个一个被分隔出来显示
在修改一下在$ * 和$@这里用双引号引起来
$*是以空格形式分隔
$@是以列表分隔
在添加两条命令
$*是一个整体被分割出来
$@是个体一个一个分割出来
我们再从写一个脚本
$#代表执行命令的个数
我们执行一条真确的命令用 $?,执行返回码为0
如果执行一条错误命令,执行返回码是非0
返回码为0表示正确,非0表示执行异常
vim mybak.sh
#!/bin/bash
time=backup-`date +%F`.tgz
tar zcf $time $* &> /dev/null #/dev/nu1l表示的是-一个黑洞文件,通常用于丢弃不需要的数据输出
echo "已执行 $0 脚本,"
echo"共完成 $# 个对象的备份"
echo "具体内容包括: $*"
表示当前时间
第一个代表日期
第二个代表完整日期格式
第三个代表月份
复制两个文件到当前目录
进行压缩
便携一个脚本
设置一个变量值
进行压缩的归档文件将提示信息不管正确或者错误都输出到黑洞文件中
添加命令可以显示压缩文件的具体信息
给他一个可执行的权限
可以看到压缩文件,当前程序压缩了多少文件
可以看到压缩文件产生
小扩展
有小数的运算