快速入门shell脚本编写(四)

Lee出品,转载请注明出处 http://blog.csdn.net/hnulwt/article/details/43234977

继续上次学的内容,这次学习 case 语句和 shell的函数概念。

case 语句

首先先看看测试程序:

  1 #! /bin/sh
  2
  3 animal=dog
  4
  5 case "$animal" in
  6 cat)
  7         echo "cat";;
  8 dog)
  9         echo "dog";;
 10 lion)
 11         echo "lion";;
 12 esac

上面程序运行结果很简单,输出:dog

他的结构是:

case "变量名" in

字符串一)

执行语句一;;

字符串二)

执行语句二;;

esac

需要特别注意的几点是:

1,case 后面的变量名要用引号括起来(上面例子程序中的第5行)

2,匹配条件,字符串前面没有括号,后面有括号 (上面程序中的6、8、10行)

3,执行语句结束位置要有双分号; (上面程序中的7、9、11行)

4,结尾要有倒置的case匹配,即esac

函数

首先我们看一个最简单的函数,下面是一段程序:

  1 #! /bin/sh
  2
  3 sayDog()
  4 {
  5         echo "dog"
  6         return $?
  7 }
  8
  9 sayDog

程序很简单,3-7行我们定义了sayDog函数。第六行其实也可以忽略,$? 在之前章节讲过是函数的返回值,在第9行我们调用了这个函数。

来看看程序的运行结果:

$ sh test.sh

dog

参数

如何给函数里面传入参数呢,shell不像我们写的java 、c++程序在括号里面传参数,传参数只需要直接在函数里面使用$n 既可(n代表传入的第几个参数)

看下面这一段程序:

  1 #! /bin/sh
  2
  3 sayAnimals()
  4 {
  5         echo $1
  6         echo $2
  7 }
  8
  9 sayAnimals cat dog

在上面函数的第5、6行,使用了传入的参数1、参数2。第9行调用函数,并且传入cat dog俩个参数,我们来看看执行结果:

$ sh test.sh

cat

dog

看到了吧?shell传入参数其实非常简单。

返回值

shell的返回值和我们理解的一般的程序返回值是不一样的,shell 函数返回值只能是整形数值,一般是用来表示函数执行成功与否的,0表示成功,其他值则表示失败。因而用函数返回值来返回函数执行结果是不合适的。如果return一个字符串,则会得到错误提示:“numeric argument required”

程序是死的,人是活的嘛,这样不行,我们可以通过定义全局变量,函数将计算结果赋给全局变量,然后脚本中其他地方访问这个全局变量,就可以达到我们的目的啦。

输入、输出重定向

使用过ant 等工具的人可能对这个概念已经不陌生了。

每个 Unix/Linux 命令运行时都会打开三个文件:

标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。

标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。

标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

shell的重定向用于将标准输出或标准错误输出重定向到其他位置。

标准输入,标准输出,标准错误输出是什么呢?我们可以理解为:键盘是标准输入,显示器是标准输出,错误输出默认仍然是显示器。

而重定向就是将本来要输出在显示器上的东西,定向到其他位置了,比如文件中。

输出重定向的语法为:指令 > 文件名

我们举个例子,我们在终端执行命令 ls > test,这时候我们在屏幕上看不到输出,本来ls就是现实当前目录下的文件,这时候我们已经把这些输出重定向到一个叫test的文件中了。我们通过vim test打开,可以看到结果。确实结果输出到test文件中了。这里不再图示,自己执行命令即可。

输出重定向还有一个格式:指令 >> 文件名

这个格式会保证 若已存在文件,则结果追加到输出到文件末尾,即不会覆盖。

输入重定向的语法:指令 < 文件名

例子:比如我们有一个文件test.txt,里面有3行内容。我们要统计他的行数,可以通过执行命令:wc -l < test.txt来统计

结果输出:3

好了,通过四节的内容,我们已经掌握shell的基本使用方式,可以写出一些简单的shell程序,但是距离真正编码还是有一段差距的,所以我们还要继续努力!多练习,多看别人写的shell程序,达到学习,提升自己的目的。

时间: 2024-10-12 04:54:43

快速入门shell脚本编写(四)的相关文章

快速入门shell脚本编写(三)

从这一节主要学习 控制语句.循环语句 注释.shell多行注释 shell单行注释很简单,只需在每行行首增加#,但是他其实是没有提供专门的多行注释的方法的,所以我们采用投巧的方式来多行注释,用EOF分界符来多行注释,如下: 1 #! /bin/sh 2 3 file="/Desktop/file.test" 4 5 <<EOF 6 if [ -r $file ] 7 then 8 echo "1" 9 fi 10 11 if [ -w $file ] 1

Follow me---快速入门shell脚本编写(二)

上次在写shell的时候发现vi和vim不一样:vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面.vim要比vi好用许多. 这次接着上次的内容,基础知识,继续学习,本文作者也在自学中,纰漏错误在所难免,若有人发现问题请指出谢谢! Lee出品,转载请注明出处http://blog.csdn.net/hnulwt/article/details/43155797 布尔运算符 先大致熟悉一下布尔相关的三个运算符 ! 非运算 -o 或运算(or) -a 与运算(and) 接着

Follow me---快速入门shell脚本编写

努力让自己工作变得高效,会写脚本,会用脚本,往往事半功倍.所以,今天就抽出一些时间学习学习Shell脚本. --------------前方高能预警,本文写的略自娱自乐,如有看着不适,请狂戳右上角---------------------- shell有两种执行命令的方式: 交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条. 批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不

shell脚本编写nginx部署脚本

下面为shell脚本编写的nginx的安装及修改nginx.conf的脚本,脚本比较简单: #!/bin/bash function yum_install(){ yum install epel-release -y yum install nginx -y} yum_install pw=/etc/nginx/nginx.confread -p "请输入组名:" zuread -p "请输入第一个ip地址:" ip1read -p "请输入第二个ip地

shell脚本编写方法

shell脚本编写就如同一门语言,涉及到运行环境.基本语法.变量定义.函数.参数(系统参数).条件判定.执行流程控制 等等问题. 本文就以下几个方面进行描述: 运行环境: shell  shebang  Path 基本语法: 命令.变量.函数.参数.条件.流程控制. 变量相关:定义.命令参数变量和系统参数 与 配置文件读取(-r cron.daily/sysstat脚本中). 函数:定义方法 条件判定与环境测试:-x -d -f 等 执行流程控制:case 等 字符串处理与高级指令: (sed

shell脚本(四)

shell脚本(四) (7)tr命令 #实现字符转换功能 #-c string:反选string字符集,即除了该字符串的所有字符集 #-d string:删除string中出现的所有字符 #-s:删除所有重复出现的字符序列,只保留一个 #删除所有数字 tr -d "[[:digit:]]" < name.txt tr -d 0-9 < name.txt #所有小写字母转换成大写字母 tr  "[a-z]" "[A-Z]" < n

shell脚本第四篇——常用小脚本

shell脚本第四篇--常用小脚本 1.将系统进程按内存占用大小排列显示出来 # ps -e  -o "%C   : %p : %z : %a"|sort -k5-nr 2.将系统进程按CPU占用大小排列显示 # ps -e  -o "%C   : %p : %z : %a"|sort   -nr 或# ps aux --sort -rss 3.查找当前目录下占用为0字节的文件并删除 # find ./ -type f -size 0 -exec rm -rf {}

Linux Shell脚本编写——使用结构化命令(四)

命令行参数 向shell脚本传数据的最基本方法是使用命令行参数,命令行参数允许在运行脚本时向命令行添加数据值 读取参数 bash shell会将一些称为位置参数的特殊变量分配给命令行输入的所有参数,甚至包括shell执行的程序的名字,$0是程序名,$1是第一个参数,$2是第二个参数 代码4-1 [email protected]:/data# cat demo1 #!/bin/bash factorial=1 for ((i=1;i<=$1;i++)) do factorial=$[ $fact

程序员带你学习安卓开发,十天快速入门-基础知识(四)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 本系列课程是.Net程序员学习安卓开发系列课程. 下面是前三次课程列表: 程序员带你学习安卓开发,十天快速入门-安卓学习必要性 程序员带你学习安卓开发,十天快速入门-开发工具配置学习 程序员带你学习安卓开发,十天快速入-对比C#学习java语法 为了大家系统有效的快速入门安卓开发,推荐