case示例

----------------------------------------------------------------------

.. echo "case" | grep -f- *

* 例一:输入一个键,判断是大写字母,小写字母,还是数字

::

#!/bin/sh

#echo -n "hit a key:"

#read key

read -n 1 -p "hit a key:" key        # -n参数加数字代表只需输入几个字符

echo

case "$key" in

[[:upper:]] )

echo "upper letter"

;;

[[:lower:]] )

echo "lower letter"

;;

[[:digit:]])

echo "number"

;;

* )

echo "others"

esac

# if [[ "$key" =~ [[:upper:]] ]]; then echo OK; else echo KO; fi

* 例二:交互输入人名,选择性别,并显示相应的资料信息

::

read -p "input your name:" name

read -n 1  -p "choose your sex: example(m/f): " sex

sleep 1

echo

case "$sex" in

m )

echo "hello,Mr $name,welcome!"

;;

f )

echo "hello,Mrs $name,welcome!"

;;

*)

echo "please choose m (male) or f(female);"

exit 1

esac

* 例三:改写例二,在case里再嵌套case菜单,使选项更丰富

::

echo -n "input your name: "

read name

while true

do

echo "================================="

echo "         choose your sex         "

echo "         1-male                  "

echo "         2-female                "

echo "         0-exit                  "

echo "================================="

echo "please enter your choice (0-2):  "

read choice

case "$choice" in

1 )

clear

echo "hello,Mr $name,welcome!"

read -n 1 -p "are you married? y/n:" ans1

case "$ans1" in

Y|y )

echo

echo "congratulations!"

;;

N|n )

echo

echo "come on!"

;;

* )

echo

echo "Sir,please answer y or n!"

;;

esac

;;

2 )

clear

echo "hello,Mrs/Miss $name,welcome!"

read -n 1 -p "are you married? y/n:" ans2

case "$ans2" in

Y*|y* )

echo

echo "I am happy for you!"

;;

N*|n* )

echo

echo "what a pity!"

;;

*   )

echo

echo "Madam,please answer y or n!"

;;

esac

;;

0 )

clear

exit 0

;;

* )

echo "invalid choice! please choose 0-2!"

sleep 2

clear

;;

esac

done

* 例四:用select做一个选项菜单

::

PS3="please choose your OS:"    # PS3是select命令用来加入提示符的符号,如果不用PS3去指定的话,默认会使用#?

echo

select os in  xp  win7  vista   redhat  redflag  unix

do

echo

echo "your operation system is $os"

echo

break

done

数组

-----------------------------------------------

数组的定义

连续数组的定义::

[root@server4 shell03]# a=(1 2 3 4 "safd sdfa") --有空格的字符串中间加空格

[root@server4 shell03]# echo ${a[0]}    --第一个用0

1

[root@server4 shell03]# echo ${a[1]}

2

[root@server4 shell03]# echo ${a[2]}

3

[root@server4 shell03]# echo ${a[3]}

4

[root@server4 shell03]# echo ${a[4]}

safd sdfa

不连续数组的定义::

[root@server4 shell03]# b[3]='aaa'

[root@server4 shell03]# b[4]='bbb'

[root@server4 shell03]# b[7]='ccc'

[root@server4 shell03]# echo ${b[3]}

aaa

[root@server4 shell03]# echo ${b[4]}

bbb

[root@server4 shell03]# echo ${b[7]}

ccc

[root@server4 shell03]# echo ${b[1]}

查看数组的全部值::

[root@server4 shell03]# echo ${b[*]}

aaa bbb ccc

[root@server4 shell03]# echo ${b[@]}

aaa bbb ccc

[root@server4 shell03]# echo ${a[*]}

1 2 3 4 safd sdfa

[root@server4 shell03]# echo ${a[@]}

1 2 3 4 safd sdfa

查看数组的个数::

[root@server4 shell03]# echo ${#a[*]}

5

[root@server4 shell03]# echo ${#b[*]}

3

函数

---------------------------------------------------------------

::

函数名 () {

代码块

}

function 函数名 {

代码块

}

调用函数时, 直接把函数名当命令使用. 所有函数也可以有参数, 与脚本的位置参数相同

* 例五:把例四写成函数的形式

::

PS3="please choose your OS:"

echo

youros () {

select os in  xp  win7  vista   redhat  redflag  unix

do

echo

echo "your operation system is $os"

echo

break

done

}

echo "================="

youros

echo "================="

clear

youros

* 例六:交互输入一个目录,使用脚本判断目录里每个文件的权限(只判断是否可读,可写,可执行就好,suid,sgid,stiky bit可以不判断)--用函数来实现

chkpermission.sh

* 例七:简单模拟写一个服务启动脚本(有启动,关闭,重启,状态等功能)

::

start () {

for ((i=1;i<=15;i++))

do

echo -n ">"

sleep 0.3

done

echo -e '\033[32mOK\033[m'

echo -e ' [32mOK [m'

# 31红, 32绿, 33黄

}

stop () {

for ((i=1;i<=15;i++))

do

echo -n ">"

sleep 0.3

done

echo -e '\t\t[\033[31mFail\033[m]'

}

case "$1" in

start )

start

;;

stop )

stop

;;

restart )

stop

start

echo -e '\t\t[\033[33mWarning\033[m]'

;;

* )

echo "Usage:start|stop|restart"

exit 1

;;

esac

* 例八: 使用函数写一个小程序,拥有下面几种功能,

- 选择1,可以从192.168.0.4的NFS共享里下载所有笔记并保存到本机的/notes目录下

- 选择2,打包并压缩,要求带有时间标记,移动到比如:/backup/2012/12/2012-12-23.notes.tar.bz2 ,然后删除/notes下的文件,并发送邮件通知到xx@qq.com(邮件主题写上自己的姓名)

- 选择0,退出程序

::

year=`date +'%Y'`

month=`date +'%m'`

day=`date +'%Y-%m-%d'`

time=`date +'%Y-%m-%d %H:%M:%S'`

downloadnotes () {

mkdir /notes 2> /dev/null

cd /notes

# 下面两行只是从ftp下载的示例, 需要改成nfs的相关操作命令

#echo 'mirror shell' | lftp 192.168.0.4

#echo 'mirror ule_basic' | lftp 192.168.0.4

}

tarnotes () {

mkdir /backup/$year/$month  -p

tar cjf /backup/$year/$month/$day.notes.tar.bz2 /notes

rm /notes/* -rf

echo "tar notes OK in $time"|sendmail -v root > /dev/null 2>&1

# echo "邮件正文" | mail -s "邮件主题" tom@localhost

}

while true

do

echo "=================================================="

echo "    A program for  download notes and backup it   "

echo "=================================================="

echo "                                                  "

echo "             1-down load notes resource           "

echo "             2-backup notes resource              "

echo "             0-exit this program                  "

echo "                                                  "

echo "=================================================="

echo "Please enter your choice(0-2):"

read choice

case "$choice" in

1 )

clear

downloadnotes

;;

2 )

clear

tarnotes

;;

0 )

exit 1

clear

;;

* )

echo "You can only choose 0-2!"

sleep 5

clear

esac

done

* 例九:使用函数和case菜单,写一个usb挂载的脚本 (有挂载,卸载,列出挂载内容,usb拷文件到系统,系统拷文件到usb,退出程序等功能)

练习

----------------------------------------------------------------------

1. 用户一登录,就把它登录的时间,用户和从哪里登录过来的信息给记录下来(使用下面的格式):

时间(要求时间精确,显示秒)     用户    from

要求使用数组去做

提示使用下面的定义方式

::

[root@server4 shell03]# a=(`ifconfig eth0 |grep Bcast`)

[root@server4 shell03]# echo ${a[0]}

inet

[root@server4 shell03]# echo ${a[1]}

addr:10.1.1.45

[root@server4 shell03]# echo ${a[2]}

Bcast:10.1.1.255

[root@server4 shell03]# echo ${a[3]}

Mask:255.255.255.0

...................................

now=`date +'%Y-%m-%d %H:%M:%S'`

array1=(`ps |grep bash`)

mytty=${array1[1]}

array2=(`who |grep $mytty`)

echo -e "$now\t${array2[0]}\t${array2[4]}"

.. note::

如果要用户一登录就执行它,可以把这个脚本执行的语句加到/etc/profile里,把显示的内容重定向到一个文件

2. 使用函数和case菜单写一个备份恢复的脚本(备份目录,恢复目录,退出等功能,要求用函数的嵌套)

3. 备份24小时内被修改的文件,使用函数 backup.sh

ps. find

-mtime +2   两天前的文件(超过24*2的文件)

-mtime +1   一天前的文件(超过24小时的文件)

-mtime 1    一天前当天的文件

-mtime 2    两天前当天的文件

-mtime -1   一天内的文件

-mtime -2   两天内的文件

4. 找出某个目录下的空链接

要求:

* 用户可以指定一个目录做为脚本参数,而且可以指定多个, 如果不指定, 默认为当前目录

* 找出目录下的死链接(即链接的文件不存在) (test -e)

linkchk.sh

5. 写一个使用 case + shift  处理参数和选项的示例脚本

6. ssh远程无密码执行命令

7. 99乘法表

8. 验证一个用户是否在本系统上存在

附: 脚本中常用的一些工具

----------------------------------------------------------------------

Linux下的工具很多, 常用的也不少, 不一定要记得每个命令的所有参数和用法.

根据项目的环境和需要来选择合适的工具, 完美地解决问题, 这才是最重要的!

::

arch          uname          basename         dirname          chmod

chown       clear             cp                      cpio                 cmp

diff            date              dd                      echo                grep

expr          file                find                    id                     kill

pgrep        xargs            mail                   logger              sed

sleep         sort               strings               uniq                 tr

tail            head             sync                   tar                   tee

test           time              true                   wc                    zcat

linux脚本case语句,shell中的case语句,数组及函数相关推荐

  1. linux脚本添加source,shell中的source命令的巧妙用法

    首先,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录.例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如sourc ...

  2. linux脚本编写计算器,Shell中编写简单计算器

    #!/bin/bash #2016-2-29 #于虎林 #思路如下 #1,判断有没有输入类容 #2,判断输入的是不是数值 #3,判断输入的运算符 #执行运算符操作 read -t 30 -p &quo ...

  3. Linux之shell中的case in语句

    文章目录 shell中的case in 语句 1.case in 的用法 2.case in和正则表达式 shell中的case in 语句 1.case in 的用法 格式: 1 | case ex ...

  4. shell中的 case in 用法

    shell中的 case in 用法 用法case;in;esac都是shell关键字expression是表达式(既可以是一个变量,一个数字,一个字符串,还可以是一个数学计算表达式,或者是命令的执行 ...

  5. shell中使用case以及shift处理命令行参数

    shell或bash使用case与shift处理多个命令行参数 1. shift命令 在bash中定义了9个位置变量,分别使用$1,$2,-$9,借助 shift 命令可以访问多于9个的命令行参数. ...

  6. 【CentOS 7Shell编程4】,shell中的case判断#180208

    2019独角兽企业重金招聘Python工程师标准>>> hellopasswd shell中的case判断 格式case 变量名in value1) command ;; value ...

  7. linux脚本编写规则,shell脚本编写守则

    现在centos7中使用的是bash软件,通过以下命令可以查看bash版本: [root@localhost ~]# cat /etc/redhat-release #查看系统的版本 CentOS L ...

  8. linux if 判断文件,shell中的逻辑判断,if 判断文件、目录属性,if判断的一些特殊用法...

    格式1:if 条件 ; then 语句; fi //如果满足条件,然后执行语句 [root@akuilinux01 shell]# cat if1.sh #!/bin/bash a=5 if [ $a ...

  9. shell中的if语句

    shell中的if语句## 标题 1.基本语法: if [ command ]; then 符合该条件执行的语句 fi 2.扩展语法: if [ command ];then 符合该条件执行的语句 e ...

最新文章

  1. LeetCode简单题之删除一个元素使数组严格递增
  2. 感知机模拟或门的实现:权重和阈值的设置
  3. 【高并发】面试官:说说缓存最关心的问题?有哪些类型?回收策略和算法?...
  4. 自适应/响应式网页设计
  5. 数据科学家 数据工程师_数据科学家实际上赚了多少钱?
  6. 理解认证_授权_以及会话_Spring Security OAuth2.0认证授权---springcloud工作笔记110
  7. 嵌入式电路设计(工具准备)
  8. Oracle循环语句
  9. android下测试方法及junit单元测试框架配置方法
  10. 计算一棵树的深度和宽度[Treeview的深度和宽度](多题头的表格问题解决的基础)...
  11. Android内核开发:系统启动速度优化
  12. 简易呼吸灯c语言程序,51单片机(呼吸灯)C语言版.docx
  13. FastDFS原理及入门
  14. 满足AUTOSAR基础软件要求的硬件安全模块(HSM)加密运算
  15. 计算bed区间gc含量,碱基深度等
  16. 你是哪种类型的代码斗士
  17. 默认文献工具_极大提高效率:深度学习论文写作工具杂谈
  18. 2023大数据技术应用的五个主要场景总结
  19. Android Studio中实战演练——绿豆通讯录
  20. Delphi数据库处理组件BDE、ADO、InterBase和dbExpress详细说明

热门文章

  1. 如何使得自己的Python程序每行长度小于80个字符?
  2. 信号转换 | 将对称方波转换成倍频PWM波形
  3. vue indev.html,webpack多入口热加载很慢
  4. lisp压盖处理_一种压盖的制造方法
  5. sgn matlab,matlab中.*的问题
  6. mongodb索引生成HTML页面,MongoDB高级索引
  7. mysql mysqlhotcopy_MySQL备份之mysqlhotcopy与注意事项
  8. dubbo扫描第三方包_今天来浅谈一下dubbo
  9. 精确微妙计时minicom 源码节选
  10. java 模拟登陆web系统_关于java模拟登陆WEB的问题。