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

Shell的作用:介于系统内核与用户之间,负责解释命令行。
·
登录后默认使用的Shell程序,一般为 /bin/bash
不同Shell的内部指令、运行环境等会有所区别
[[email protected] ~]# 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命令,按执行顺序依次编写
[[email protected] ~]# vi frist.sh
cd /boot/
pwd
ls -lh vml
·
2、赋予可执行权限
[[email protected] ~]# chmod +x frist.sh
·
3、执行脚本文件有三种方法
方法一:脚本文件路径
[[email protected] /]# 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 脚本文件路径
[[email protected] ~]# ./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 脚本文件路径 会直接切换到脚本的工作环境
[[email protected] /]# 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
[[email protected] boot]# pwd
/boot
·
4、完善的脚本结构
脚本申明、注释信息、可执行语句
[[email protected] boot]# vi /frist.sh
#!/bin/bash
#This is my first Shell-Script.
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以vml开头的文件包括:"
ls -lh vml

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

原文地址:http://blog.51cto.com/13348945/2173502

时间: 2024-07-31 18:41:48

Shell脚本 (一)Shell脚本基础 使用Shell变量的相关文章

运维与自动化系列③自动化部署基础与shell脚本实现

自动化部署基础与shell脚本实现 关于自动化的基础知识: 1.1:当前代码部署的实现方式: 运维纯手工scp到web服务器纯手工登录git服务器执行git pull或svn服务器执行svn update更新代码通过xftp上传代码开发打压缩包上传到服务器然后解压 缺点:1.需要运维全程参与,占用大量的工作时间2.上线时间比较慢3.人为造成的失误较多,管理比较混乱4.回滚复杂而且慢,还不及时 1.2:运行环境规划:开发环境:开发者本地有自己的环境,然后运维需要设置开发环境的公用服务,例如开发数据

shell脚本进阶之数组基础

SHELL脚本--shell数组基础 ? 数组和变量的区别:变量在内存中占用的空间是离散的,数组在内粗中开辟一段连续的大内存空间,随后数组中的每个元素都放入数组内存中.数组元素使用index标识. ? bash里有两种数组普通数组和关联数组.普通数组只能使用整数类形数值作为数组索引,关联数组可以使用字符串作为索引.关联数组的另外三种称呼:字典(dict),hash结构和映射(map),是一种key和value一一对应的关系. 一.普通数组 1.1定义普通数组 方法一: [[email prote

Shell之/bin/bash脚本的基础实战

本人菜鸟一枚,初次接触linux的shell脚本: shell script,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法. shell脚本的好处: 在一些复杂的linux运维工作中,大量的重复的输入和交互操作,可以通过shell脚本批量的处理,自动化的完成维护,从而减轻更多的人力成本. linux的s

shell编程之服务脚本编写,文件锁以及信号捕获

shell脚本编程是linux运维工程师必备的技能,也是非常重要的一个技能,所以把shell编程学好,只有好处.基础语法我也就不讲了,学过C语言这些语言的,稍微看一下就能明白shell编程的基础,所以我们直接切入正题. 开班第20天: 今天的课程大纲: shell编程中的函数 编写一个自动挂载的脚本 利用autofs怎么实现自动挂载 文件锁和信号捕获trap sed流文件编辑器 详细讲解: shell编程中的函数 shell中,我们定义函数的方法有两种: 下面调用的时候,直接调用函数名就可以了

二、shell文件权限和脚本执行

一.认识权限和用户管理 1.查看权限 权限类型: 1.r 读 2.w 写 3.x 可执行 Linux用户 1.所有者(u) 2.所属组(g) (所有者及所有者所在组的全部用户) 3.其他用户(o)(其他组的所有用户(包括文件所有者)) 4.所有用户(a) 文件权限解读 文件类型 所有者权限  所属组权限  其他用户权限            所有者  用户所在的组  文件大小  创建时间  文件名 [[email protected] ~]# ll 总用量 100 -rw-------. 1 r

【shell】oracle安装脚本 - 未完成

自动安装oracle所需要的rpm包(需要访问外网): #! /bin/sh rpmpack=" binutils compat-libstdc++* elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libg

系统优化脚本(此脚本为原始脚本,未按照shell规范写)

系统优化脚本 #!/bin/sh user=alan #shutdown iptables chkconfig iptables off  && /etc/init.d/iptables stop   #shutdown selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  cat /etc/selinux/config  setenforce 0  getenforce &&

shell学习之条件测试(参考shell脚本编程诀窍)

1关于test测试,查看man文档知 表达式的判断 ( EXPRESSION )                    #EXPRESSION is true ! EXPRESSION                      #EXPRESSION is false EXPRESSION1 -a EXPRESSION2        #both are true,-o means or 字符串是否为空,相等 -n STRING  #the length of STRING is nonzero

shell迷你版监控脚本

写了一个shell版mini监控脚本,纯属跟大家分享学习下,有兴趣学习shell的可以看下.(*_*) 总共3个脚本文件service.sh, daemon.sh ,tcp.sh 实现了一些基本功能:端口监控,存活监控,掉线邮件报警,重新上线邮件通知 将3个文件放在同个目录下 设置:在tcp.sh中可以设置邮件通知地址,与邮件通频率次数 运行: ./service.sh start 主要文件代码如下: tcp.sh文件 #!/bin/bash LANG=C #邮件地址设置 fromaddress

shell中引用其他脚本的方法

在Shell中引用其他脚本的方法是source   filename.sh 或    .    filename.sh 注意:      .   和   filename.sh之间必须有空格