【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脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- 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 < ...
随机推荐
- ASP.NET中使用 Response.Write("<script>alert('****');</script>");后CSS界面发生变化的解决方法 (经验证)
在后台使用Response.Write("<script>alert('Hello World');</script>);弹出alert窗口后发现网页的界面和原来CS ...
- Notepad++配置Python运行环境
转自:http://www.cnblogs.com/zhcncn/p/3969419.html Notepad++配置Python开发环境 1. 安装Python 1 下载 我选择了32位的2.7 ...
- Java是如何管理内存的?
本文转自CSDN用户Kevin涂腾飞的文章java内存管理机制:http://blog.csdn.net/tutngfei1129287460/article/details/7383480 JAVA ...
- SCCM 2012系列之新特性
SCCM 2012站点类型: 站点 作用 相对于SCCM 2007 的变化 中心管理站点The central administration site(CAS) 中心管理站点协调内部站点的数据复制.使 ...
- FTP远程命令集
使用ftp命令进行远程文件传输 ftp命令是标准的文件传输协议的用户接口.ftp是在TCP/IP网络上的计算机之间传输文件的简单有效的方法.它允许用户传输ASCII文件和二进制文件. 在ftp会话过程 ...
- 解决黑苹果与windows时区不一致
原理就是将windows识别硬件时间为UTC-0而不是现在的UTC+8 下面都是抄来的 注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\T ...
- Codeforces Round #146 (Div. 1) A. LCM Challenge 水题
A. LCM Challenge 题目连接: http://www.codeforces.com/contest/235/problem/A Description Some days ago, I ...
- javascript之处理Ajax错误
使用Ajax须留心两类错误.它们的差别源于视角的不同. 第一类错误是从XMLHttpRequest对象的角度看到的问题:某些因素阻止了请求发送到server,比如DNS无法解析主机名,连接请求被拒绝. ...
- [Angular2 Form] Understand the Angular 2 States of Inputs: Pristine and Untouched
Angular 2’s ngModel exposes more than just validity, it even gives you the states of whether the inp ...
- [AngularJS+ GSAP] Greensock TimelineLite Animation Sequences
TimelineLite is a piece of the Greensock TweenMax library that provides the ability to create sequen ...