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 ...
随机推荐
- jQuery系列:DOM操作
1. 访问元素 在访问页面时,需要与页面中的元素进行交互式的操作.在操作中,元素的访问主要包括对元素属性.内容.值.CSS的操作. 1.1 元素属性操作 1.1.1 设置或返回被选元素的属性值 语法格 ...
- TortoiseGIT创建及合并分支
一.创建分支 项目右键 => TortoiseGit(T) => 创建分支,然后右键切换到刚刚创建的分支,新增/修改一个文件,提交分支到远端服务器,推送成功之后分支就创建好了. 二.合并分 ...
- SpingMVC 核心技术帮助文档
声明:本篇文档主要是用于参考帮助文档,没有实例,但几乎包含了SpringMVC 4.2版本的所有核心技术,当前最新版本是4.3,4.2的版本已经经是很新的了,所以非常值得大家一读,对于读完这篇文档感觉 ...
- 实现跨浏览器html5表单验证
div:nth-of-type(odd){ float: left; clear: left; } .origin-effect > div:nth-of-type(even){ float: ...
- TypeScript 强类型 JavaScript – Rafy Web 框架选型
今天看到了 AngularJs 2.0 版本将基于 TypeScript 构建 的消息.与同事们对 TypeScript 展开了讨论.本文记录一些个人的想法. 理想的 JavaScript 开发模式 ...
- React-Native学习系列(一)
近段时间一直在忙,所以博客也没有更新,这两天我翻了一下写的这几篇博客,感觉写的都很片面,所以,我想重新写一个系列教程,从最基础的开始,来让大家更容易学会React-Native. 这个系列大部分只介绍 ...
- Xamarin for Visual Studio V3.11.431 于 2015.4.3-2015.4.17 最新发布(Win & Mac)
Beta Release: April 3 edited April 17 in Visual Studio Released versions: Windows Xamarin.VisualStud ...
- 01windows窗体程序学习
静态用户名和密码的登录练习 private void button2_Click(object sender, EventArgs e) { textUser.Text = Convert.ToStr ...
- java基础知识总结(1)
定义类: 访问修饰符 class 类名{ } 访问修饰符如:public .priate是可选的 class是声明类的关键字 按照命名规范,类名首字母大写 例:创建“人”类,关键代码: pub ...
- nodejs 安装
安装nodejs进入nodejs源码./configure --prefix=/software/installed/nodemakemake install 如果configure的时候提示:WAR ...