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 < ...
随机推荐
- 简单的ViewPager了解Scroller类
View滑动是自定义ViewGroup中十分常见的一个功能.Android提供了多种View滑动的方法. layout方法 offsetLeftAndRight()与offsetTopAndBotto ...
- Dreamweaver 扩展开发:文档路径等信息的处理
//browseFile(fieldToStoreURL){ //getFullPath(filePathURL){ //getSimpleFileName() { //fixUpPath(docUR ...
- VS2010开发工具使用技巧<之简单讲解>
俗语云:工欲善其事必先利其器! 1.代码放大 效果:放大前----------------------------------------------------------------->放大 ...
- SVM分类与回归
SVM(支撑向量机模型)是二(多)分类问题中经常使用的方法,思想比较简单,但是具体实现与求解细节对工程人员来说比较复杂,如需了解SVM的入门知识和中级进阶可点此下载.本文从应用的角度出发,使用Libs ...
- owner:轻松管理java项目配置
前段时间,一同事说在 github 上“活捉了”一个很有趣的开源项目,它是一个超轻量级的 jar 包,能够帮助你在 java 项目中摒弃样板式的 properties 配置代码,让你轻松自如地管理和使 ...
- react+redux教程(五)异步、单一state树结构、componentWillReceiveProps
今天,我们要讲解的是异步.单一state树结构.componentWillReceiveProps这三个知识点. 例子 这个例子是官方的例子,主要是从Reddit中请求新闻列表来显示,可以切换reac ...
- 给ListView设置emptyView
给ListView设置emptyView 版权声明:本文为博主原创文章,未经博主允许不得转载. 使用ListView和GridView时,当列表为空时,默认是不显示任何内容的,这样对用户非常不友好,这 ...
- 在 C# 中定义一个真正只读的 List
C# 中的 readonly 关键字表示类中的字段只允许在定义时候或者构造方法中初始化.普通类型的数据完全可以达到预期的效果,但是在对象或者列表中,要想达到只读的效果,只用一个 readonly 关键 ...
- 深入理解JavaScript——闭包
跟很多新手一样我也是初入前端,对闭包的理解花费的时间和精力相当的多.效果也还行,今天我就来根据自己的理解细致的讲一讲闭包,由于是初入学习的时候不免有一些弯路和困惑,我想信这也是很多跟我一样的人会同样遇 ...
- DOM 事件深入浅出(一)
在项目开发时,我们时常需要考虑用户在使用产品时产生的各种各样的交互事件,比如鼠标点击事件.敲击键盘事件等.这样的事件行为都是前端DOM事件的组成部分,不同的DOM事件会有不同的触发条件和触发效果.本文 ...