【Linux】Shell脚本编程(二)
- 练习:求100以内所有偶数之和;
- 使用至少三种方法实现;
- 示例1:
- #!/bin/bash
- #
- declare -i sum=0 #声明一个变量求和,初始值为0
- for i in $(seq 0 2 100); do
- sum=$(($sum+$i))
- done
- echo "Even sum: $sum."
- 示例2:
- #!/bin/bash
- #
- declare -i sum=0
- for i in {1..100}; do
- if [ $[$i%2] -eq 0 ]; then
- sum=$[$sum+$i]
- fi
- done
- echo "Even sum: $sum."
- 增强型赋值:
- +=
- sum=$[$sum+$i]
- let sum+=$i
- -=,*=,/=,%=,
- let count=$[$conunt+1] -->let count+=1-->let count++
- let count=$[$conunt-1] -->let count-=1-->let count--
- 示例:显示/etc目录下所有的每个普通文件,而后统计一共有多少个这样的文件;
- #!/bin/bash
- #
- declare -i count=0
- for file in /etc/*; do
- if [ -f $file ]; then
- let count++
- echo "$count $file"
- fi
- done
- echo "Total: $count files."
- 测试表达式:
- 整数测试;-gt,-lt,-ge,-le,-eq,-ne
- 字符串测试:==,>,<,!=,-z,-n,=~
- 注意:
- (1)字符串等会比较测试[ "$hostname" == 'localhost' ]
- (2)模式匹配测试:[[ "STRING" -~ PATTERN ]]
- 示例:写一个脚本实现如下功能;
- 获取当前主机的主机名:
- 如果当前主机的主机名为空,或者为localhost,则将其修改为www.mageedu.com
- 组合测试条件:
- 条件间逻辑运算:
- 与:多个条件要同时满足;
- 或:多个条件满足其一即可;
- 非:对指定的条件取反;
- 表达式组合:
- 与:[[ CONDITION -a CONDITION2 ]]
- 或:[[ CONDITION -o CONDITION2 ]]
- 非:[ !CONDITION ]
- 命令组合:
- 与:COMMAND1 && COMMAND2 <-- [ EXPR1 ] && [ EXPR2 ]
- 或:COMMAND1 || COMMAND2
- 非:!COMMAND
- false && true = false
- false && false = false
- true && false = true
- true && true = true
- if COMMAND; then
- COMMAND2
- fi
- 短路操作符:
- true || true = true
- true || false = true
- false || true = true
- false || false = false
- if ! COMMAND1; then
- COMMAND2
- fi
- COMMAND1 && COMMAND2 || COMMAND3
- if COMMAND1;then
- COMMAND2
- else
- COMMAND3
- fi
- 获取当前主机的主机名:
- 如果当前主机的主机名为空,或者为localhost,则将其修改为www.mageedu.com
- #!/bin/bash
- #
- hostname=$(hostname)
- if [ -z "$hostname" -o "$hostname"=="localhost" ]; then
- hostname www.magedu.com
- fi
- 练习:写一个脚本
- (1)传递两个文本文件路径给脚本;
- (2)显示两个文件中空白行数较多的文件及其空白行的个数;
- (3)显示两个文件中总行数较多的文件及其总行数;
- 练习:写一个脚本
- (1)提示用户输入一个字符串;
- (2)判断:
- 如果输入的是quit,则退出脚本;
- 否则,则显示其输入的字符串内容;
- 练习:写一个脚本,打印九九乘法表:
- 循环嵌套
- #!/bin/bash
- #
- for j in {1..9}; do
- for i in $(seq 1 $j); do
- echo -n -e "${i}X${j}=$[$i*$j]\t"
- done
- echo
- done
- 多分支的if语句:
- 单分支:
- if CONDITION; then
- if-true-分支
- fi
- 双分支:
- if CONDITION; then
- if-true-分支
- else
- if-false-分支
- fi
- 多分支:
- if CONDITION1; then
- if -CONDITION-true-分支
- elif CONDITION2; then
- if-CONDITION2-true-分支
- ...
- else
- if-ALL-false-分支
- fi
- 示例:通过脚本参数传递一个文件路径给脚本,判断其类型:
- #!/bin/bash
- #
- if [ $# -lt 1 ]; then
- echo "Usage: $0 <path>"
- exit 1
- fi
- if [ -f $1 ]; then
- echo "Rgulat file."
- elif [ -d $1 ]; then
- echo "Directory."
- elif [ -h $1 ]; then
- echo "Symbolic link."
- elif [ -b $1 ]; then
- echo "Block special."
- elif [ -c $1 ]; then
- echo "Charactoer special."
- elif [ -S $1 ]; then
- echo "Socket file."
- else
- echo "file not exist or unknow type."
- fi
- 示例:脚本可接受四个参数
- start:创建文件/var/lock/subsys/SCRIPT_NAME
- stop:删除此文件
- restatr:删除此文件并重新创建
- status:如果文件存在,显示为“running”;否则,显示为“stopped”
- basename命令:
- 取得路径的基名:
- 示例:
- #!/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
- if [ "$1" == "start" ]; then
- if [ -f $lockfile ]; then
- echo "$prog is started yes."
- else
- touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.."
- fi
- elif [ "$1" == "stop" ]; then
- if [ -f $lockfile ]; then
- rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.."
- else
- echo "$prog is stopped yet."
- fi
- elif [ "$1" == "restart" ]; then
- if [ -f $lockfile ]; then
- rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..."
- else
- touch $lockfile && echo "$prog is stopped, Starting $prog ok..."
- fi
- elif [ "$1" == "status" ]; then
- if [ -f $lockfile ]; then
- echo "Running..."
- else
- echo "Stopped..."
- fi
- else
- echo "Usage: $prog start|stop|restart|status"
- exit 1
- fi
- case语句:
- 简洁版多分支if语句:
- 使用场景:判断某变量的值是否为多种情形中的一种时使用;
- 语法:
- case $VARIABLE in
- PATTERN1)
- 分支1
- ;;
- PATTERN2)
- 分支2
- ;;
- PATTERN3
- 分支3
- ;;
- ...
- *)
- 分支n
- ;;
- esac
- PATTERN可使用glob模式的通配符:
- *:任意长度的任意字符;
- ?:任意单个字符;
- []:指定范围内的任意单个字符;
- a|b:多选1;
- 示例:提示键入任意一个字符,判断类型:
- 脚本如下:
- #!/bin/bash
- #
- read -p "Plz enter a character: " char
- case $char in
- [a-z])
- echo "A character."
- ;;
- [0-9])
- echo "A digit."
- ;;
- *)
- echo "A special character."
- ;;
- esac
- 示例:脚本可接受四个参数
- start:创建文件/var/lock/subsys/SCRIPT_NAME
- stop:删除此文件
- restatr:删除此文件并重新创建
- status:如果文件存在,显示为“running”;否则,显示为“stopped”
- 脚本如下:
- #!/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
- case $1 in
- 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
- ;;
- *)
- echo "Usage: $prog start|stop|restart|status"
- exit 1
- esac
【Linux】Shell脚本编程(二)的更多相关文章
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- 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脚本编程基础之练习篇
shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...
- 【学习】Linux Shell脚本编程
1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...
- [linux] shell脚本编程-xunsearch安装脚本学习
安装脚本setup.sh #!/bin/sh # FULL fast install/upgrade script # See help message via `--help' # $Id$ # s ...
- linux shell脚本编程笔记(二): 分支结构
1.if if command then commands fi if command then commands else commands fi if command1 then command ...
随机推荐
- C#中DllImport用法和路径问题
DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息. DllImport属性应用于方法,要 ...
- HTTP原理
HTTP原理 1 简介 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统. HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式. 2.简单快速:客 ...
- VS2010 Web网站发布详解
1.项目某一网站 右键 发布 出来对话框后 发布方法选择文件系统,发布前删除所有现有文件(选择此项) ,然后点击发布就OK了. 2.之后如果只修改aspx页面,编译下无需再次发布,如果修改了类库或.c ...
- EasyUI ComboBox默认值
combobox数据加载完后设置默认值 $('#ck').combobox({ url: '/External/GetAllCk', valueField: 'Ddbh', textField: 'D ...
- javaScript hook
今天在网上搜索了不少资料,基本概念如下: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到 ...
- 基于FlashPaper的文档播放器
本文主要讨论.描述了使用Adobe公司的Flex与FlashPaper产品完成对发布到网上的文档资料进行只读控制,也就是说只允许浏览操作.对下载.打印进行控制. FlashPaper FlashPap ...
- Codeforces Round #290 (Div. 2) B. Fox And Two Dots dfs
B. Fox And Two Dots 题目连接: http://codeforces.com/contest/510/problem/B Description Fox Ciel is playin ...
- 说说C#静态变量的诡异与恶心
发现一段很诡异的C#代码,见识了静态构造函数这种奇怪的东西: using System; namespace StaticTest { class A { public static int X; s ...
- JSP中Session的使用
JSP session使用方法 <%@page contentType="text/html;charset=GB2312"%><html> <he ...
- POJ 2970 The lazy programmer(优先队列+贪心)
Language: Default The lazy programmer Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 1 ...