Shell脚本(一)

1.    简介

shell(壳)是linux系统中用于将用户执行的命令解析成计算机能够执行的代码,然后交给内核由内核进行执行。通过/etc/shells文件中可以查看该linux系统所支持的shell种类。

shell脚本就是将平时写的一些命令按一定顺序保存到文件中,然后在赋予该文件执行权限就是一个shell脚本。

2.    shell脚本的格式

[[email protected] ~]# vi shell.sh            //使用vi编辑器进行编写shell脚本
#!/bin/bash                                        //指定所指定的那种shell
#this is a test shell scripts                //对该脚本的说明
x=1
echo $x                                        //为该脚本的内容

3.    shell脚本的有以下几种执行方式

1)    [[email protected] ~]# sh shell.sh
       1
2)    [[email protected] ~]# . shell.sh
       1

3)    [[email protected] ~]# source shell.sh
       1

4)    [[email protected] ~]# ./shell.sh            
        -bash: ./shell.sh: 权限不够
        [[email protected] ~]# chmod a+x ./shell.sh
        [[email protected] ~]# ./shell.sh                    //直接执行需要给该文件授予执行权限
        1
4.    linux在处理数据时有下面几种交互设备文件

标准输入(STDIN)  文件设备编号为 0

标准输出(STDOUT)    文件设备编号为 1

标准错误(STDERR)    文件编号为 2

5.    重定向

重定向:如原本将标准输出的数据显示到屏幕,但是通过重定向“>”符号将标准数据的文件传送到指定的文件中。

[[email protected] ~]# cat ./shell.sh > cdx.txt                        //大于号表示标准输出
[[email protected] ~]# cat cdx.txt                
#!/bin/bash
#this is a test shell scripts
x=1
echo $x

[[email protected] ~]# ls -l /jjj 2> stderr.txt                        //通过文件编号2将上重定向符号将错误信息导入到指定文件中
[[email protected] ~]# cat stderr.txt
ls: 无法访问/jjj: 没有那个文件或目录
[[email protected] ~]# echo "abc123" > passwd.txt
[[email protected] ~]# passwd --stdin test < passwd.txt    //通过通过小于号将秘钥导入到test账号中

6.    管道符号

可以将前一个命令的值作为后一个命令的参数,可以对该值进行连续操作。

[[email protected] ~]# ifconfig eth0 | grep "HWaddr" | awk ‘{print $5}‘
00:0C:29:3A:A0:9A
7.    shell变量

shell变量有下列几种变量:1.自定义变量    2.环境变量    3.位置变量    4.预定义变量

1)    自定义变量,用户可以直接赋值

[[email protected] ~]# a=1                    //直接给a赋值为1
[[email protected] ~]# echo $a
1

2)    变量和赋值使用的特殊符号

双引号""当赋值的时候有空格时需要通过双引号指定为一个整体

[[email protected] ~]# b="abc def"
[[email protected] ~]# echo $b
abc def

单引号赋值的时候有特殊字符时,需要通过单引号将括号中的特殊变成普通字符[[email protected] ~]# [[email protected] ~]# d=‘$abc‘                
[[email protected] ~]# echo $d
$abc
反撇号和“$()”可以对括号中的语句先执行

[[email protected] ~]# rpm -qf $(which cat)
coreutils-8.4-19.el6.i686
[[email protected] ~]# rpm -qf `which cat`
coreutils-8.4-19.el6.i686

3)    位置变量

他根据参数的位置分为$1,$2,$3......$9,$0为命令的变量。

[[email protected] ~]# vi expr.sh
#!/bin/bash
#express scripts
expr $1 + $2                //指定$1和$2

[[email protected] ~]# sh expr.sh 12 23      //给$1和$2赋值
35                    //计算结果

4)        预定义变量

$?:查看上一个命令执行的状态,如果值为0 表示命令执行完成。如果值为非0 表示上一个命令执行时有问题

$0:表示当前执行的脚本或程序的名称。

$#: 表示命令行中位置参数的个数

$*:表示所有位置参数的内容

时间: 2024-08-11 11:16:37

Shell脚本(一)的相关文章

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种:

shell脚本交互:expect学习笔记及实例详解

最近项目需求,需要写一些shell脚本交互,管道不够用时,expect可以很好的实现脚本之间交互,搜索资料,发现网上好多文章都是转载的,觉得这篇文章还不错,所以简单修改之后拿过来和大家分享一下~ 1. expect是spawn: 后面加上需要执行的shell命令,比如说spawn sudo touch testfile 1.3 expect: 只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,Li

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性 作者:赵全文  网名:guestart 我们生产环境的Oracle数据库都做了RMAN备份,是采用了一周的RMAN备份保留策略:除了使用RMAN备份以外,我们还使用了爱数(Eisoo)备份软件来进行备份,可以说是做到了有备无患.可是,如果有一天,Oracle数据库由于主机层面硬件原因或是数据库层面的原因不能对外提供高可用服务的时候,假设数据丢了一大部分,我们只有用RMAN备份来进行恢复,再如果发现,RMAN备份失效了,那就往地缝里

如何在linux Shell脚本里面把一个数组传递到awk内部进行处理

前段时间和几位同事讨论过一个问题:Shell脚本里面怎样把一个数组传递到awk内部进行处理? 当时没有找到方法.前两天在QQ群里讨论awk的时候,无意间又聊起这个话题.机缘巧合之下找到一个思路,特此分享. 测试环境: [root]# head -1 /etc/redhat-release Red Hat Enterprise Linux Server release 6.5 (Santiago) [root]# awk --version | head -1 GNU Awk 3.1.7 众所周知

利用shell脚本批量修改表

最近公司里因为开发新功能,程序员需要快速在某一个库里的所有表添加字段,于是就用shell脚本简单快速实现批量修改表添加字段 #!/bin/bash export mysql_bin=/usr/local/mysql/bin export database=database export tables=`$mysql_bin/mysql -Bse "use ${database};show tables;"` for i in ${tables}         do          

Shell 脚本模拟 milter 实现黑白名单及关键词过滤

程序执行流程:1. 开始接受邮件.2. 检查发件人是否在黑名单内,如果是拒绝接受;否则继续3. 检查发件人是否在白名单内,如果是接收邮件;否则继续4. 对邮件进行关键字过滤,如果邮件中包含被过滤的关键词信息,则拒绝接收   该邮件;否则,接收该邮件. Usage: sh mailfilter.sh  [-r reject-addr] [-a add-addr][-k keywords]########################################################

Linux Shell脚本攻略(1.12)

1.12 函数和参数 和其他脚本语言一样,Bash同样支持函数,并且可以传递参数. 1.12.1 函数定义和传参 #!/bin/bash function fname() #也可以用fname()代替 { echo $1,$2; #访问参数1和参数2 echo "[email protected]"; #以列表的方式一次性打印所有参数 echo "$*"; #类似于[email protected],但是参数被作为单个实体 return 0; #返回值 } fnam

shell脚本编程学习笔记(1)

在linux上编程,离不开shell,计划好好看看shell编程,并在这里做些笔记以供有相同兴趣的人分享,主要参考<shell脚本学习指南>. 学习shell脚本编程之前,需要了解脚本编程语言和编译型语言的概念. 一般很多中型.大型的程序是用编译型语言写成的,比如C.C++.Java等.这类程序从源代码编译成目标代码,直接通过计算机执行.编译型语言执行效率比较高,大多运作于底层,处理的是字节.整数.浮点数等机器层级的对象,因此实现一个具体的功能,比如"将一个目录里的所有文件复制到另外

用shell脚本实现通用二进制格式mysql 5.5.28 x86_64的安装

用shell脚本实现通用二进制格式mysql 5.5.28 x86_64的安装 首先在网上用gfsoso.com来搜索下载mysql软件包mysql-5.5.28-linux2.6-x86_64.tar.gz,再用 winSCP把mysql上传到服务器上,上传位置可根据个人喜好,我个人一般放在服务器的/usr/local/src目录下. 此处我们是先命令行下实现一次,而后所有操作全部用shell脚本自动实现. 个人环境 centos 6.5 X86-64  所用空闲空间都做成了LVM. 准备工作