脚本编程之函数: function: 功能

 

      结构化编程,不能独立运行,需要调用时执行,可以被多次调用

 

1、定义一个函数:

function FUNCNAME {

  command

}

 

FUNCNAME()  {

  command

}

 

2、自定义函数执行状态返回值:return #    (0-255)

 

3、接受参数的函数:

./a.sh m n

$1: m

$2: n

 

TWOINT 5 6

$1: 5

$2: 6

 

练习1:写一个脚本,自动显示相关信息

#!/bin/bash

# diskusage.sh

function SHOWMENU() {    #定义函数
cat << EOF
d|D) show disk usages
m|M) show memory usages
s|S) show swap usages
q|Q) quit
EOF
}

read -p "Your choice:" CHOICE
until [ $CHOICE == ‘q‘ -o $CHOICE == ‘Q‘ ];do
  case $CHOICE in
    d|D) df -h ;;
    m|M) free -m |grep "^Mem" ;;
    s|S) free -m |grep "^Swap" ;;
    *) SHOWMENU
    read -p "Your choice,again:" CHOICE ;;
  esac
  SHOWMENU
  read -p "Your choice,again:" CHOICE
done

练习2:写一个脚本,自动新增用户且密码与用户相同

#!/bin/bash
# adduser.sh
#
ADDUSER() {
if ! id -u $1 &> /dev/null;then
  useradd $1
  echo $1 | passwd --stdin $1 &> 1116.www.qixoo.qixoo.com/dev/null
  return 0
else
  return 1
fi
}

for I in {1..3};do
  ADDUSER user$I
  if [ $? -eq 0 ] ;then
    echo "add user$I finished."
  else
    echo "user$I exists,add Failuer."
  fi
done

练习3:写一个脚本,判定192.168.0.200-192.168.0.254之间的主机哪些在线。要求:

1、使用函数来实现一台主机的判定过程;

2、在主程序中来调用此函数判定指定范围内的所有主机的在线情况。

#!/bin/bash
# ping.sh
#
PING() {
   if ping -c1 -W1 $1 &> /dev/null;then
     return 0
   else
     return 1
   fi
}

for I in {200..210};do
  PING 10.109.131.$I
  if [ $? -eq 0 ] ;then     #上一条语句执行状态结果0或1
    echo "10.109.131.$1 is up."
  else
    echo "10.109.131.$1 is down."
  fi
done

for I in {200..210};do
  if PING 10.109.131.$I ;then  #彩色部分输出return的结果0或1,加反引号是echo显示的信息
    echo "10.109.131.$1 is up."
  else
    echo "10.109.131.$1 is down."
  fi
done

练习4:写一个脚本:使用函数完成

1、函数能够接受一个参数,参数为用户名;判断一个用户是否存在,

  如果存在,就返回此用户的shell和UID;并返回正常状态值0;

  如果不存在,就说此用户不存在;并返回错误状态值1;

2、在主程序中调用函数;

 扩展1:在主程序中,让用户自己输入用户名后,传递给函数来进行判断;

 扩展2:在主程序中,输入用户名判断后不退出脚本,而是提示用户继续输入下一个用户名;如果用户输入的用户不存在,请用户重新输入;但如果用户输入的是q或Q就退出;

#!/bin/bash
# bash.sh
#
USER(){
  if id $1 &> /dev/null ;then
    echo "` grep ^$1 /etc/passwd |cut -d: -f3,7`"
    return 0
  else
    return 1
  fi
}

read -p "keyin your username:" USERNAME
until [ $USERNAME == ‘Q‘ -o $USERNAME == ‘q‘ ];do
  if USER $USERNAME ;then         #if语句执行USER的return值0或1  
    read -p "keyin your username:" USERNAME
  else
    read -p "$USERNAME exists,Please keyin your username again:" USERNAME
  fi
done

[ etc]# ./bash.sh
keyin your username:root
0:/bin/bash
keyin your username:ww
ww exists,Please keyin your username again:tt
tt exists,Please keyin your username again:root
0:/bin/bash
keyin your username:q

[ etc]#

Linux命令:简单函数调用的更多相关文章

  1. Linux02 /Linux命令简单使用

    Linux02 /Linux命令简单使用 目录 Linux02 /Linux命令简单使用 1. 远程连接Linux 2. 目录相关操作 3. 简单命令 1. 远程连接Linux 远程连接工具 Xshe ...

  2. 转 PHP中exec、system等函数调用linux命令问题

    PHP中exec.system等函数调用linux命令问题 先小说两句:今天研究了下PHP调用LINUX命令的功能,一开始怎么做都调用不成功,试了好久才终于成功了,所以发出来分享一下.下面我将详细介绍 ...

  3. Linux的简单介绍和常用命令的介绍

    Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...

  4. 从零单排Linux – 1 – 简单命令

    从零单排Linux – 1 – 简单命令 Posted in: Linux 从零单排Linux – 1 一.Linux的简单命令: 1.忘记root密码: 读秒时按任意键进入 – e – ↓选择第二个 ...

  5. Linux命令行及Vim简单学习记录

    Linux命令行 1.打开命令行 Ctrl+Alt+t 2.目录 显示当前目录的文件列表 ls 跳转至当前目录中的x文件夹 cd x 返回根目录 cd 3.文件 新建文件1.cpp touch ./1 ...

  6. Linux的简单命令

    Linux的简单命令 1.更改linux服务器的登录密码 成功登录后输入命令: passwd 然后按照提示操作即可 2.在当前路径下新建文件夹:mkdir 新建文件夹名 3.解压和压缩文件tar.gz ...

  7. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

  8. Xshell登陆服务器及Linux的简单命令

    在之前的推文中,我已经给出了怎样利用Git登陆服务器”你在用xshell,putty登陆?推荐一个小工具(Git)登陆“其中包括xshell登陆服务器.今天讲讲常见的Linux命令,这个和之前将的利用 ...

  9. Linux 的简单命令以及在idea中配置码云

    Linux 的简单命令: ls(list)功能:列出目录内容 cd(change directory)功能:切换目录 touch 1.txt 在当前目录创建一个文件1.txt clear:清除屏幕 p ...

  10. Linux命令系列之ls——原来最简单的ls这么复杂

    Linux命令系列之ls--原来最简单的ls这么复杂 ls命令应该是我们最常用的命令之一了,但是我们可能容易忽略那些看起来最简单的东西. 简介 ls命令的使用格式如下 ls [选项] [具体的文件] ...

随机推荐

  1. 《深入理解Spark:核心思想与源码分析》(第2章)

    <深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析> ...

  2. [C#解惑] #2 对象的初始化顺序

    谜题 在上一篇C#解惑中,我们提到了对象的初始化顺序.当我们创建一个子类的实例时,总是会先执行基类的构造函数,然后再执行子类的构造函数.那么实例字段是什么时候初始化的呢?静态构造函数和静态字段呢?今天 ...

  3. 正则表达式语法(msdn)

    “正则表达式”描述在搜索文本正文时要匹配的一个或多个字符串.该表达式可用作一个将字符模式与要搜索的字符串相匹配的模板. 正则表达式包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符” ...

  4. codevs 4543 treap 模板

    type rec=record lc,rc,v,rnd,size,w,fa:longint; end; var n,root,tot,ans,opt,x,i,po:longint; tr:array[ ...

  5. 关于Hibernate的sequence diagram

  6. 《HTTP 权威指南》

    第一篇:  Web基础  (HTTP概述. URL.HTTP报文.连接管理) 0. scheme:方案!     协议类型 1.HTTP:超文本传输(状态转移)协议:通信协议方案.     web浏览 ...

  7. RabbitMQ 路由选择 (Routing)

    让日志接收者能够订阅部分消息.例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息. 1.绑定(Bindings) 在前面中我们已经使用过绑定.类似下面的代码 ...

  8. 了解ASP.NET MVC几种ActionResult的本质:JavaScriptResult & JsonResult

    在之前的两篇文章(<EmptyResult & ContentResult>和<FileResult>)我们剖析了EmptyResult.ContentResult和F ...

  9. spoj705 后缀数组求不同子串的个数

    http://www.spoj.com/problems/SUBST1/en/  题目链接 SUBST1 - New Distinct Substrings no tags  Given a stri ...

  10. wordpress模板各文件函数解析

    修改主题时发现好多WordPress主题函数都不了解,因此网上摘抄了一份放在自己博客上,便于以后好找. 在WordPress中如何按你的意愿显示页面,关键看你是否了解WordPress主题模板页面.这 ...