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脚本编程(三)的更多相关文章

  1. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  2. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  3. Linux Shell脚本编程--Linux特殊符号大全

    Linux Shell脚本编程--Linux特殊符号大全 linux_shell 特殊符号的介绍 2011

  4. Linux Shell脚本编程while语句

    Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo    uptime    sleep 3done 2,把监控结果保存 ...

  5. Linux Shell脚本编程-基础1

    概述:  shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...

  6. 【学习】Linux Shell脚本编程

    1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...

  7. Linux shell脚本编程基础之练习篇

    shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...

  8. [linux] shell脚本编程-xunsearch安装脚本学习

    安装脚本setup.sh #!/bin/sh # FULL fast install/upgrade script # See help message via `--help' # $Id$ # s ...

  9. Linux Shell脚本编程的注意事项

    Linux下(Shell脚本 http://www.jbxue.com/jb/shell/)编程的一些注意事项,如编程风格.命名风格等. 一.常用技巧 ssh user@server bash < ...

随机推荐

  1. C#设计模式-状态者模式

    一. 状态者(State)模式 每个对象都有其对应的状态,而每个状态又对应一些相应的行为,如果某个对象有多个状态时,那么就会对应很多的行为.那么对这些状态的判断和根据状态完成的行为,就会导致多重条件语 ...

  2. WCF学习之旅—请求与答复模式和单向模式(十九)

    一.概述 WCF在通信过程中有三种模式:请求与答复.单向.双工通信.以下我们一一介绍. 二.请求与答复模式 客户端发送请求,然后一直等待服务端的响应(异步调用除外),期间处于假死状态,直到服务端有了答 ...

  3. 为 Sublime Text 3059 配置 PHP 编译环境

    关于  Sublime Text 3059 的安装及汉化 请参看 http://www.xiumu.org/note/sublime-text-3.shtml 为 sublime Text 配置 PH ...

  4. mongoose - 让node.js高效操作mongodb

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  5. Git(远程仓库:git@oschina)-V2.0

    1.注册git@osc(也就是“码云”) 这里会提示注册密码==push密码,反正一定要记住的东西.   2.安装git 这里要设置个人信息 git config --list //查看git信息 g ...

  6. SQL Server-分页方式、ISNULL与COALESCE性能分析(八)

    前言 上一节我们讲解了数据类型以及字符串中几个需要注意的地方,这节我们继续讲讲字符串行数同时也讲其他内容和穿插的内容,简短的内容,深入的讲解,Always to review the basics. ...

  7. Living in the Matrix with Bytecode Manipulation--转

    原文地址:https://www.infoq.com/articles/Living-Matrix-Bytecode-Manipulation You are probably all too fam ...

  8. 读书笔记--SQL必知必会21--使用游标

    21.1 游标 结果集(result set),SQL查询说检出的结果. 游标(cusror),是一个存储在DBMS服务器上的数据库查询. 游标不是一条SELECT语句,而是被该句检索出来的结果集. ...

  9. Centos 上 Tengine安装

    安装步骤: 1.系统环境 1.1 更新系统 [root@centos ~]# yum update -y 1.2 查看环境 [root@centos ~]# cat /etc/redhat-relea ...

  10. Django--自定义用户认证

    Django自带的用户认证 以前都是用Django自带的用户认证,用户名字段一对一关系对应Django--User表(其实它也是继承了abstractbaseuser). 1 2 3 from dja ...