【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 < ...
随机推荐
- easyui datagrid 的分页刷新按钮
datagrid 刷新bug: 情形: 当用户A,B 同时操作 datagrid时(记录1,记录2.记录3).如果A如果删除记录1, B此时已选中了记录1 ,记录2 , 这时B点击分页中的刷新按 ...
- 在Windows2012下安装SQL Server 2005无法启动服务的解决办法
下面是我亲自经历过的总结. 因为尝鲜安装了Windows2012,的确很不错,唯一的遗憾就是不支持Sql Server 2005的安装.找了很多办法,基本上都有缺陷.现在终于找到一种完全正常没有缺陷的 ...
- Redis操作命令
1)连接操作命令 quit:关闭连接(connection) auth:简单密码认证 help cmd: 查看cmd帮助,例如:help quit 2)持久化 s ...
- URAL 1233 - Amusing Numbers
首先计算出k至少为第几位,如果m小于这个数,那么输出0 还有一种情况, 就是10的i次方的这种情况,如果i+1等于m,那么直接输出k,否则输出0 其他的情况,就是二分,然后判断计算其插入到k之前的数的 ...
- Lockless Ring Buffer Design
https://www.kernel.org/doc/Documentation/trace/ring-buffer-design.txt Lockless Ring Buffer Design == ...
- 【转】牛逼闪闪的Ruby迭代器
D瓜哥最近想做一个网站,另外,老早就有学习一门动态语言的想法,满足着两个条件的编程语言中,Ruby.Python是最合适的两种语言.现在Ruby on Rails如日中天,光芒万丈!所以,就选定了Ru ...
- 【开发实例】C#调用SAPI实现语音合成的两种方法
我们都知道现在的语音合成TTS是可以通过微软的SAPI实现的,好处我就不多说了,方便而已,因为在微软的操作系统里面就自带了这个玩意,主要的方式有两种: 1.使用COM组件技术,不管是C++,C#,D ...
- YouTube上的版权保护
早在2007年的时候,我曾写过一篇名为“YouTube: The Big Copyright Lie”(YouTube:关于版权的弥天大谎)的文章,表达了我对YouTube又爱又恨的情感纠结: 现在回 ...
- C++ Code_ScrollBar
主题 1. ScrollBar的使用 2. 3. 4. 5. 属性 HScrollBar VScrollBar 直接拖拽1其中任意空间到对话框上面是,你一拖拽滚动条,它立即回到原始位置 ...
- tcpdump抓包分析具体解释
說實在的,對於 tcpdump 這個軟體來說,你甚至能够說這個軟體其實就是個駭客軟體, 因為他不但能够分析封包的流向,連封包的內容也能够進行『監聽』, 假设你使用的傳輸資料是明碼的話,不得了,在 ro ...