Linux shell脚本编程(三)
Linux shell脚本编程
流程控制:
循环语句:for,while,until while循环: while CONDITION; do
循环体
done 进入条件:当CONDITION为“真”;
退出条件:当CONDITION为“假”; while CONDITION; do
循环体
控制变量的修正表达式
done 示例:求100以内所有正整数之和;
#!/bin/bash
#
declare -i sum=0
declare -i i=1 while [ $i -le 100 ]; do
let sum+=$i
let i++
done echo "Sum: $sum." 练习:分别求100以内所有奇数之和,及所有偶数之和; 示例:打印九九乘法表;
#!/bin/bash
#
declare -i i=1
declare -i j=1 while [ $j -le 9 ]; do
while [ $i -le $j ]; do
echo -e -n "${i}X${j}=$[$i*$j]\t"
let i++
done
echo
let i=1
let j++
done until循环:
until CONDITION; do
循环体
循环控制变量的修正表达式
done 进入条件:当CONDITION为“假”时
退出条件:当CONDITION为“真”时 示例:求100以内正整数之和;
#!/bin/bash
#
declare -i sum=0
declare -i i=1 until [ $i -gt 100 ]; do
let sum+=$i
let i++
done echo "Sum:$sum."
练习1:分别求100以内所有偶数之和,以及所有奇数之和;
练习2:实现九九乘法表;
练习3:分别使用while和until循环实现添加10个用户:user-user10; 循环控制:
continue:提前结束本轮循环,而直接进入下一轮;
break [n]:提前结束循环; while CONDTION;do
.......
if CONDITION; then
break [n]
fi
done while CONDTION;do
.......
if CONDTION2; then
continue [n]
fi
....... 示例:求100以内所有偶数之和;
#!/bin/bash
#
declare -i sum=0
declare -i i=0 while [ $i -le 100 ]; do
let i++
if [ $[$i%2] -eq 1 ]; then
echo "$i is a odd."
continue
fi
let sum+=$i
done echo "Sum:$sum." 死循环:
while true; do
循环体
if CONDITION; then
break
fi
done until false; do
循环体
if CONDITION; then
break
fi
done 示例;每隔3秒钟查看当前系统是否有名为'gentoo'的用户登录;
如果其次查看gentoo登录了,则显示gentoo已经登录;
如果未登录,就显示仍然未开始,并显示这是已经是第多少次查看了; #!/bin/bash
#
username=$1
declare -i count=0 while true; do
if who | grep "^$username" &> /dev/null; then
echo "$username is logged."
break
else
let count++
echo "$count $username is not login."
fi
sleep 3
done 示例:2 #!/bin/bash
#
declare -i count=0
username=$1 if [ $# -lt 1 ]; then
echo "At lease one argument."
exit 1
fi if ! id $username &> /dev/null; then
echo "No such user."
exit 2
fi until who | grep "^$username" &> /dev/null; do
let count++
echo "$count $username is not login."
sleep 3
done
echo "$username is logged on." while循环的特殊用法:
遍历文件的每一行:
while read VARIABLE; do
循环体
done < /PATH/FROM/SOME_FILE 示例:找出UID为偶数的所有用户显示其用户名和ID号;
#!/bin/bash
#
while read line; do
userid=$(echo $line | cut -d: -f3)
if [ $[$userid%2] -eq 0 ]; then
echo $line | cut -d: -f1,3
fi
done < /etc/passwd for循环的特殊用法:
for((expr1;expr2;expr3)); do
循环体
done expr1:定义控制变量,并初始赋值;
expr2:循环控制条件;
进入条件:控制条件为“真”
退出条件:控制条件为“假” expr3:修正控制变量 示例:求100以内所有正整数之和; 练习1:打印九九乘法表:
练习2:传递一个文本文件为参数给脚本,取出此文件的所有的偶数行给予显示,行前要显示行号; 函数:
function:功能
把一段具有独立功能代码封装在一起,并给予命名;后续用到时,可直接通过给定函数名来调用整体代码; 函数作用:
代码重用:
模块化编程: 函数的使用方法:
先定义:编写函数代码
后调用:给出函数名,还可以按需传递参数; 定义方法:
(1)function f_name {
函数体
}
(2)f_name() {
函数体
} 调用函数:
f_name [argu1,argu2,...] 自定义函数状态返回值:
return [#]
0:成功
1-255:失败
注意:函数代码执行时,一旦遇到return,函数代码终止运行,函数返回;
示例:此前的服务脚本 #!/bin/bash
#
prog=$(basename $0)
lockfile="/var/lock/subsys/$prog"
#echo $lockfile if [ $# -lt 1 ]; then
echo "Usage: $prog start|stop|restart|status"
exit 1
fi start() {
if [ -f $lockfile ]; then
echo "$prog is started yes."
else
touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.."
fi
}
stop() {
if [ -f $lockfile ]; then
rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.."
else
echo "$prog is stopped yet."
fi
}
restart() {
if [ -f $lockfile ]; then
rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..."
else
touch $lockfile && echo "$prog is stopped, Starting $prog ok..."
fi
}
status() {
if [ -f $lockfile ]; then
echo "Running..."
else
echo "Stopped..."
fi
} case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;; *)
echo "Usage: $prog start|stop|restart|status"
exit 1
esac
示例:判断用户ID号的奇偶性 #!/bin/bash
#
evenid() {
if [ $# -lt 1 ]; then
return 1
fi if ! id $1 &> /dev/null; then
return 2
fi userid=$(id -u $1)
if [ $[$userid%2] -eq 0 ]; then
echo "$1,Even user ID."
else
echo "$1,Odd user ID."
fi
} evenid root evenid
echo $? evenid rooooooot
echo $? 模块化编程
示例:
架设/root/bin/srv目录有两个文件:
(1)函数文件
(2)脚本文件 为脚本使用配置文件
一个文件中只定义变量
脚本文件source此变量定义的文件 变量的作用域:
局部变量:
local VARIABLE=value 存活时间:
函数执行开始,至函数返回结束;
Linux shell脚本编程(三)的更多相关文章
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- Linux shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- Linux Shell脚本编程--Linux特殊符号大全
Linux Shell脚本编程--Linux特殊符号大全 linux_shell 特殊符号的介绍 2011
- Linux Shell脚本编程while语句
Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo uptime sleep 3done 2,把监控结果保存 ...
- Linux Shell脚本编程-基础1
概述: shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...
- 【学习】Linux Shell脚本编程
1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...
- Linux shell脚本编程基础之练习篇
shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...
- [linux] shell脚本编程-xunsearch安装脚本学习
安装脚本setup.sh #!/bin/sh # FULL fast install/upgrade script # See help message via `--help' # $Id$ # s ...
- Linux Shell脚本编程的注意事项
Linux下(Shell脚本 http://www.jbxue.com/jb/shell/)编程的一些注意事项,如编程风格.命名风格等. 一.常用技巧 ssh user@server bash < ...
随机推荐
- 阿里云 SDK python3支持
最近的一个项目需要操作阿里云的RDS,项目使用python3,让人惊讶的是官方的SDK竟然只支持python2 在阿里云现有SDK上改了改,文件的修改只涉及aliyun/api/base.py,详见h ...
- GroupData群数据库的还原与优化
一.背景 这个数据库的数据文件mdf大概有83G左右,当还原数据库之后感觉可以做很多性能方面上的调优,合并数据后mdf数据文件大概有59G左右,行压缩后mdf数据文件大概有39G左右,页压缩后mdf数 ...
- 【.net深呼吸】(WCF)OperationContextScope 的用途
一个WCF服务可以实现多个服务协定(服务协定实为接口),不过,每个终结点只能与一个服务协定关联,并指定调用的唯一地址.那么,binding是干吗的?binding是负责描述通信的协议,以及消息是否加密 ...
- 【.net 深呼吸】记录WCF的通信消息
前面老周给大伙伴们介绍了把跟踪信息写入日志文件的方法,今天咱们换个类似的话题来扯一下,对了,咱们就说说怎么把WCF的往来消息log下来吧. 尽管在现实生活中,我们不主张偷窥他人信息,不过,偷窥程序信息 ...
- 【Win 10 应用开发】加载外部的 srt 字幕
据说系统内置的多媒体功能支持 srt. ssa 等字幕,老周测试过几种格式的字幕均能加载. SRT 字幕是最简单的字幕结构,甚至你用记事本都能做出来,就是分为几行来写. 第一行是字幕的编号,应该是从1 ...
- 【Win 10应用开发】提供建议列表的输入控件(AutoSuggestBox)
AutoSuggestBox控件与TextBox控件相似,但,AutoSuggestBox控件可以提供一个下拉列表,用户可以从弹出的下拉列表中选择一个项,并把被选项的内容显示在输入框上.就类似于搜索引 ...
- jQuery之常用且重要方法梳理(siblings,nextAll,end,wrap,apply,call,each)-(二)
1.siblings() siblings() 获得匹配集合中每个元素的同胞,通过选择器进行筛选是可选的. <body> <div><span>Hello</ ...
- byte[] 转成图片方法
/// <summary> /// ImageData 的摘要说明 /// </summary> public class ImageData : IHttpHandler { ...
- C语言之预处理
这是2016年的最后一篇博客,年初定的计划是写12篇博客,每月一篇,1/3转载,2/3原创,看来是实现不了了! -- 题外话.今天要写的东西是C语言中的预处理器,我们常说的宏定义的用法.为什么要写这个 ...
- 制作自己的MVC框架(三)——应用
一.数据库操作 目前封装了两种数据库,“MongoDB”和“MySQL”,用到了一次接口“IDatabase.php”. namespace library\db; interface IDataba ...