Linux shell脚本编程(二)
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脚本编程 流程控制: 循环语句: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 ...
随机推荐
- [转] STM32各种时钟的区别
[原创]:http://m.oschina.net/blog/129357 我在原创的基础又从另一位博主处引用了一些内容. 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是 ...
- 安装keil MDK5
昨天买的stm32板子今天就到了,顺丰速度确实很快. 我这是刚开始整STM32,首先需要下载keil MDK,直接杀去keil官网下载,其实对于学习者,我建议大家下载软件能去官网就去官网,尽量少用二道 ...
- [大数据之Yarn]——资源调度浅学
在hadoop生态越来越完善的背景下,集群多用户租用的场景变得越来越普遍,多用户任务下的资源调度就显得十分关键了.比如,一个公司拥有一个几十个节点的hadoop集群,a项目组要进行一个计算任务,b项目 ...
- SQL语句优化
(1) 选择最有效率的表名顺序 ( 只在基于规则的优化器中有效 ) : ORACLE 的解析器按照从右到左的顺序处理 FROM 子句中的表名, FROM 子句中写在最后的表 ( 基础表dri ...
- c 网络与套接字socket
我们已经知道如何使用I/O与文件通信,还知道了如何让同一计算机上的两个进程进行通信,这篇文章将创建具有服务器和客户端功能的程序 互联网中大部分的底层网络代码都是用C语言写的. 网络程序通常有两部分组成 ...
- Bootstrap框架的学习(一)
一.Bootstrap框架介绍 Bootstrap是一个非常优秀的前端UI框架,一个轻量级的UI前端框架,是基于HTML+CSS+JavaScript的框架. 二.简单介绍 Bootstrap框架是属 ...
- ActiveMQ消息队列的使用及应用
这里就不说怎么安装了,直接解压出来就行了. 谢绝转载,作者保留所有权力 目录: 一:JMQ的两种消息模式 1.1:点对点的消息模式 1.2:订阅模式 二:点对点的实现代码 2.1:点对点的发送端 2 ...
- ASP.NET Core 整合Autofac和Castle实现自动AOP拦截
前言: 除了ASP.NETCore自带的IOC容器外,我们还可以使用其他成熟的DI框架,如Autofac,StructureMap等(笔者只用过Unity,Ninject和Castle). 1.ASP ...
- 4D卓越团队-两天培训总结
上周末参加了公司组织的领导力培训课程-4D卓越团队(创业型团队领导力训练项目),感觉有一些用,在这里分享一下. 课前游戏 培训老师先带我们做了一个游戏:每一个人,在同时参加培训的人中找到另外的 6 个 ...
- .NET Core 1.1 发布 文档下载资源汇总
.NET Core 1.1 RTM 版2016/11/16 发布.对应发布 ASP.NET Core 1.1 .EF Core 1.1. 你可以通过Visual Studio 2015, Visual ...