Shell脚本 (一)Shell脚本基础 使用Shell变量

Shell的作用:介于系统内核与用户之间,负责解释命令行。
·
登录后默认使用的Shell程序,一般为 /bin/bash
不同Shell的内部指令、运行环境等会有所区别
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
·
####################编写脚本实例####################
1、使用vi文本编辑器,每行一条Linux命令,按执行顺序依次编写
[root@localhost ~]# vi frist.sh
cd /boot/
pwd
ls -lh vml
·
2、赋予可执行权限
[root@localhost ~]# chmod +x frist.sh
·
3、执行脚本文件有三种方法
方法一:脚本文件路径
[root@localhost /]# sh /frist.sh
/boot
-rwxr-xr-x. 1 root root 5.2M 7月 30 09:18 vmlinuz-0-rescue-78ce74241c884ba1861483f7ce9ce624
-rwxr-xr-x. 1 root root 5.2M 11月 23 2016 vmlinuz-3.10.0-514.el7.x86_64
·
方法二:sh 脚本文件路径
[root@localhost ~]# ./frist.sh
/boot
-rwxr-xr-x. 1 root root 5.2M 7月 30 09:18 vmlinuz-0-rescue-78ce74241c884ba1861483f7ce9ce624
-rwxr-xr-x. 1 root root 5.2M 11月 23 2016 vmlinuz-3.10.0-514.el7.x86_64
·
方法三:source 脚本文件路径 会直接切换到脚本的工作环境
[root@localhost /]# source /frist.sh
/boot
-rwxr-xr-x. 1 root root 5.2M 7月 30 09:18 vmlinuz-0-rescue-78ce74241c884ba1861483f7ce9ce624
-rwxr-xr-x. 1 root root 5.2M 11月 23 2016 vmlinuz-3.10.0-514.el7.x86_64
[root@localhost boot]# pwd
/boot
·
4、完善的脚本结构
脚本申明、注释信息、可执行语句
[root@localhost boot]# vi /frist.sh
#!/bin/bash
#This is my first Shell-Script.
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以vml开头的文件包括:"
ls -lh vml

·
[root@localhost boot]# /first.sh
当前的目录位于:
/boot
其中以vml开头的文件包括:
-rwxr-xr-x. 1 root root 5.2M 7月 30 09:18 vmlinuz-0-rescue-78ce74241c884ba1861483f7ce9ce624
-rwxr-xr-x. 1 root root 5.2M 11月 23 2016 vmlinuz-3.10.0-514.el7.x86_64
·
·
####################重定向与管道操作####################
1.交互式硬件设备
类型 文件描述编号 默认设备
标准输入 0 键盘
标准输出 1 屏幕
标准错误 2 屏幕
·
2.重定向操作
类型 操作符号 作用
重定向输入 < 从指定的文件读取数据,而不是从键盘输入
重定向输出 > 将输出结果保存到指定的文件(覆盖原有内容)
标准错误输出 2> 将错误信息保存到指定的文件(覆盖原有内容)
------------------ 2>> 将错误信息追加到指定的文件中
混合输出 &> 将标准输出、标准错误的内容保存到同一个文件中
·
3管道操作符号“|”
将左侧的命令输出结果,作为右侧命令的处理对象
[root@localhost ~]# grep "bash" /etc/passwd
root:x:0:0:root:/root:/bin/bash
yuan:x:1021:1021::/home/yuan:/bin/bash
[root@localhost ~]# grep "bash" /etc/passwd | wc -l
2
·
####################Shell变量的作用、类型####################
作用
为灵活管理Linux系统提供特定参数,有两层意思
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置、系统环境的变化而变化
·
类型
自定义变量:由用户自己定义、修改和使用
环境变量:由系统维护,用于设置工作环境
位置变量:通过命令行给脚本程序传递参数
预定义变量:Bash中内置的一类变量,不能直接修改
·
自定义变量
变量名=变量值
·
####################查看变量的值 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
·
####################赋值时使用引号####################
双引号:允许通过$符号引用其他变量值
单引号:禁止引用其他变量值,$视为普通字符
反撇号:命令替换,提取命令执行后的输出结果
·
###使用bash内置的read命令来给变量赋值,read命令提示用户输入用户信息,从而实现简单的交互过程###
read [-p "提示信息"] 变量名
[root@localhost /]# read ToDir2
/opt
[root@localhost /]# echo $ToDir2
/opt
·
####################设置变量的作用范围####################
[root@localhost /]# echo "$Product $Version"
Python 2.7.13
[root@localhost /]# export Product Version ####设置为全局变量
[root@localhost /]# bash ####进入shell环境
[root@localhost /]# echo "$Product $Version" ###子程序引用全局变量
Python 2.7.13
[root@localhost /]# exit
exit
·
####################整数变量的运算####################
加法运算:+
减法运算: -
乘法运算: *
除法运算: /
求模(取余)运算: %
[root@localhost /]# X=35
[root@localhost /]# Y=16
[root@localhost /]# expr $X + $Y
51
·
[root@localhost /]# expr $X - $Y
19
[root@localhost /]# expr $X * $Y
560
[root@localhost /]# expr $X / $Y
2
[root@localhost /]# expr $X % $Y
3
·
[root@localhost ~]# Ycube=expr $Y \* $Y \* $Y
[root@localhost ~]# echo $Ycube
4096
·
####################位置变量####################
表示为 $n,n为1~9之间的数字
·
[root@localhost /]# vi add.sh
#!/bin/bash
SUM=expr $1 + $2
echo "$1 + $2 = $SUM"
·
[root@localhost ~]# chmod +x add.sh
·
[root@localhost /]# ./add.sh 12 34
12 + 34 = 46
·
####################预定义变量####################
$#:命令行中位置变量的个数
$:所有位置变量的内容
$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
$0:当前执行的进程/程序名
[root@localhost ~]# vi mybak.sh
#!/bin/bash
TARFILE=beifen-date +%s.tgz
tar zcf $TARFILE $
&> /dev/null
echo "已执行 $0 脚本"
echo "共完成 $# 个对象的备份"
echo "具体内容包括:$*"
·
[root@localhost ~]# chmod +x mybak.sh ###给这个脚本执行权限
[root@localhost ~]# ./mybak.sh /boot/grub ###备份一个
已执行 ./mybak.sh 脚本
共完成 1 个对象的备份
具体内容包括:/boot/grub
[root@localhost ~]# ./mybak.sh /etc/passwd /etc/shadow ###备份二个
已执行 ./mybak.sh 脚本
共完成 2 个对象的备份
具体内容包括:/etc/passwd /etc/shadow

猜你喜欢

转载自blog.51cto.com/13348945/2173502