练习:求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脚本编程(二)的更多相关文章

  1. Linux shell脚本编程(二)

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

  2. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  3. Linux shell脚本编程(一)

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

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

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

  5. Linux Shell脚本编程while语句

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

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

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

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

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

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

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

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

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

  10. linux shell脚本编程笔记(二): 分支结构

    1.if if command then commands fi if command then commands else commands fi if command1 then command ...

随机推荐

  1. iOS单例 宏定义

    #define singleton_interface(className) \ + (className *)shared##className; // @implementation #defin ...

  2. logstash开源日志收集查询分析系统

    http://storysky.blog.51cto.com/628458/1158707/ http://www.logstash.net/ http://blog.sina.com.cn/s/bl ...

  3. Spring REST实践之Spring Web MVC

    Spring概要 Spring Framework提供了依赖注入模型和面向切面编程,简化了基础型代码的编写工作以及更好的能够与其它框架和技术整合起来.Spring Framework由data acc ...

  4. linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录

    转自:http://blog.csdn.net/snlying/article/details/6184102 Linux系统中scp命令的用法. scp就是secure copy的简写,用于在lin ...

  5. C# List 中 Find 方法

    实例化一个集合 List<User> userCollection = new List<User>(); userCollection.Add(new User(1, &qu ...

  6. (2)html文本格式化 解说

  7. Mysql的存储过程(以Mysql为例进行讲解)

       我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 在数据库中,用户通过指定存 ...

  8. Codeforces Gym 100231L Intervals 数位DP

    Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description Start with an integer, N0, ...

  9. .NET正则基础——.NET正则类及方法应用

    1        概述 初学正则时,对于Regex类不熟悉,遇到问题不知道该用哪种方法解决,本文结合一些正则应用的典型应用场景,介绍一下Regex类的基本应用.这里重点进行.NET类的介绍,对于正则的 ...

  10. DirectSound的应用

    假设仅仅使用PlaySound()这个API函数来表现声音效果的话,那么就无法表现出声音的混音效果,由于PlaySound在播放还有一个声音时,必定会导致现有声音的停止.因此,使用 PlaySound ...