1. 练习:求100以内所有偶数之和;
  2. 使用至少三种方法实现;
  3.  
  4. 示例1:
  5.  
  6. #!/bin/bash
  7. #
  8. declare -i sum=0 #声明一个变量求和,初始值为0
  9.  
  10. for i in $(seq 0 2 100); do
  11. sum=$(($sum+$i))
  12. done
  13.  
  14. echo "Even sum: $sum."
  15.  
  16. 示例2:
  17.  
  18. #!/bin/bash
  19. #
  20. declare -i sum=0
  21.  
  22. for i in {1..100}; do
  23. if [ $[$i%2] -eq 0 ]; then
  24. sum=$[$sum+$i]
  25. fi
  26. done
  27.  
  28. echo "Even sum: $sum."
  29.  
  30. 增强型赋值:
  31. +=
  32. sum=$[$sum+$i]
  33. let sum+=$i
  34. -=,*=,/=,%=,
  35.  
  36. let count=$[$conunt+1] -->let count+=1-->let count++
  37. let count=$[$conunt-1] -->let count-=1-->let count--
  38.  
  39. 示例:显示/etc目录下所有的每个普通文件,而后统计一共有多少个这样的文件;
  40.  
  41. #!/bin/bash
  42. #
  43. declare -i count=0
  44.  
  45. for file in /etc/*; do
  46. if [ -f $file ]; then
  47. let count++
  48. echo "$count $file"
  49. fi
  50. done
  51.  
  52. echo "Total: $count files."
  53.  
  54. 测试表达式:
  55. 整数测试;-gt,-lt,-ge,-le,-eq,-ne
  56. 字符串测试:==,>,<,!=,-z,-n,=~
  57.  
  58. 注意:
  59. (1)字符串等会比较测试[ "$hostname" == 'localhost' ]
  60. (2)模式匹配测试:[[ "STRING" -~ PATTERN ]]
  61.  
  62. 示例:写一个脚本实现如下功能;
  63. 获取当前主机的主机名:
  64. 如果当前主机的主机名为空,或者为localhost,则将其修改为www.mageedu.com
  65.  
  66. 组合测试条件:
  67. 条件间逻辑运算:
  68. 与:多个条件要同时满足;
  69. 或:多个条件满足其一即可;
  70. 非:对指定的条件取反;
  71.  
  72. 表达式组合:
  73. 与:[[ CONDITION -a CONDITION2 ]]
  74. 或:[[ CONDITION -o CONDITION2 ]]
  75. 非:[ !CONDITION ]
  76.  
  77. 命令组合:
  78. 与:COMMAND1 && COMMAND2 <-- [ EXPR1 ] && [ EXPR2 ]
  79. 或:COMMAND1 || COMMAND2
  80. 非:!COMMAND
  81.  
  82. false && true = false
  83. false && false = false
  84.  
  85. true && false = true
  86. true && true = true
  87.  
  88. if COMMAND; then
  89. COMMAND2
  90. fi
  91. 短路操作符:
  92. true || true = true
  93. true || false = true
  94.  
  95. false || true = true
  96. false || false = false
  97.  
  98. if ! COMMAND1; then
  99. COMMAND2
  100. fi
  101.  
  102. COMMAND1 && COMMAND2 || COMMAND3
  103. if COMMAND1;then
  104. COMMAND2
  105. else
  106. COMMAND3
  107. fi
  108.  
  109. 获取当前主机的主机名:
  110. 如果当前主机的主机名为空,或者为localhost,则将其修改为www.mageedu.com
  111.  
  112. #!/bin/bash
  113. #
  114. hostname=$(hostname)
  115.  
  116. if [ -z "$hostname" -o "$hostname"=="localhost" ]; then
  117. hostname www.magedu.com
  118. fi
  119.  
  120. 练习:写一个脚本
  121. (1)传递两个文本文件路径给脚本;
  122. (2)显示两个文件中空白行数较多的文件及其空白行的个数;
  123. (3)显示两个文件中总行数较多的文件及其总行数;
  124. 练习:写一个脚本
  125. (1)提示用户输入一个字符串;
  126. (2)判断:
  127. 如果输入的是quit,则退出脚本;
  128. 否则,则显示其输入的字符串内容;
  129.  
  130. 练习:写一个脚本,打印九九乘法表:
  131. 循环嵌套
  132.  
  133. #!/bin/bash
  134. #
  135. for j in {1..9}; do
  136. for i in $(seq 1 $j); do
  137. echo -n -e "${i}X${j}=$[$i*$j]\t"
  138. done
  139. echo
  140. done
  141.  
  142. 多分支的if语句:
  143. 单分支:
  144. if CONDITION; then
  145. if-true-分支
  146. fi
  147. 双分支:
  148. if CONDITION; then
  149. if-true-分支
  150. else
  151. if-false-分支
  152. fi
  153.  
  154. 多分支:
  155. if CONDITION1; then
  156. if -CONDITION-true-分支
  157. elif CONDITION2; then
  158. if-CONDITION2-true-分支
  159. ...
  160. else
  161. if-ALL-false-分支
  162. fi
  163.  
  164. 示例:通过脚本参数传递一个文件路径给脚本,判断其类型:
  165.  
  166. #!/bin/bash
  167. #
  168. if [ $# -lt 1 ]; then
  169. echo "Usage: $0 <path>"
  170. exit 1
  171. fi
  172.  
  173. if [ -f $1 ]; then
  174. echo "Rgulat file."
  175. elif [ -d $1 ]; then
  176. echo "Directory."
  177. elif [ -h $1 ]; then
  178. echo "Symbolic link."
  179. elif [ -b $1 ]; then
  180. echo "Block special."
  181. elif [ -c $1 ]; then
  182. echo "Charactoer special."
  183. elif [ -S $1 ]; then
  184. echo "Socket file."
  185. else
  186. echo "file not exist or unknow type."
  187. fi
  188.  
  189. 示例:脚本可接受四个参数
  190. start:创建文件/var/lock/subsys/SCRIPT_NAME
  191. stop:删除此文件
  192. restatr:删除此文件并重新创建
  193. status:如果文件存在,显示为“running”;否则,显示为“stopped”
  194.  
  195. basename命令:
  196. 取得路径的基名:
  197. 示例:
  198.  
  199. #!/bin/bash
  200. #
  201. prog=$(basename $0)
  202. lockfile="/var/lock/subsys/$prog"
  203. #echo $lockfile
  204.  
  205. if [ $# -lt 1 ]; then
  206. echo "Usage: $prog start|stop|restart|status"
  207. exit 1
  208. fi
  209.  
  210. if [ "$1" == "start" ]; then
  211. if [ -f $lockfile ]; then
  212. echo "$prog is started yes."
  213. else
  214. touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.."
  215. fi
  216. elif [ "$1" == "stop" ]; then
  217. if [ -f $lockfile ]; then
  218. rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.."
  219. else
  220. echo "$prog is stopped yet."
  221. fi
  222. elif [ "$1" == "restart" ]; then
  223. if [ -f $lockfile ]; then
  224. rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..."
  225. else
  226. touch $lockfile && echo "$prog is stopped, Starting $prog ok..."
  227. fi
  228. elif [ "$1" == "status" ]; then
  229. if [ -f $lockfile ]; then
  230. echo "Running..."
  231. else
  232. echo "Stopped..."
  233. fi
  234. else
  235. echo "Usage: $prog start|stop|restart|status"
  236. exit 1
  237. fi
  238.  
  239. case语句:
  240. 简洁版多分支if语句:
  241. 使用场景:判断某变量的值是否为多种情形中的一种时使用;
  242.  
  243. 语法:
  244. case $VARIABLE in
  245. PATTERN1)
  246. 分支1
  247. ;;
  248. PATTERN2)
  249. 分支2
  250. ;;
  251. PATTERN3
  252. 分支3
  253. ;;
  254. ...
  255. *)
  256. 分支n
  257. ;;
  258. esac
  259.  
  260. PATTERN可使用glob模式的通配符:
  261. *:任意长度的任意字符;
  262. ?:任意单个字符;
  263. []:指定范围内的任意单个字符;
  264. a|b:多选1;
  265.  
  266. 示例:提示键入任意一个字符,判断类型:
  267. 脚本如下:
  268. #!/bin/bash
  269. #
  270. read -p "Plz enter a character: " char
  271.  
  272. case $char in
  273. [a-z])
  274. echo "A character."
  275. ;;
  276. [0-9])
  277. echo "A digit."
  278. ;;
  279. *)
  280. echo "A special character."
  281. ;;
  282. esac
  283.  
  284. 示例:脚本可接受四个参数
  285. start:创建文件/var/lock/subsys/SCRIPT_NAME
  286. stop:删除此文件
  287. restatr:删除此文件并重新创建
  288. status:如果文件存在,显示为“running”;否则,显示为“stopped”
  289.  
  290. 脚本如下:
  291.  
  292. #!/bin/bash
  293. #
  294. prog=$(basename $0)
  295. lockfile="/var/lock/subsys/$prog"
  296. #echo $lockfile
  297.  
  298. if [ $# -lt 1 ]; then
  299. echo "Usage: $prog start|stop|restart|status"
  300. exit 1
  301. fi
  302. case $1 in
  303. start)
  304. if [ -f $lockfile ]; then
  305. echo "$prog is started yes."
  306. else
  307. touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.."
  308. fi
  309. ;;
  310. stop)
  311. if [ -f $lockfile ]; then
  312. rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.."
  313. else
  314. echo "$prog is stopped yet."
  315. fi
  316. ;;
  317. restart)
  318. if [ -f $lockfile ]; then
  319. rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..."
  320. else
  321. touch $lockfile && echo "$prog is stopped, Starting $prog ok..."
  322. fi
  323. ;;
  324. status)
  325. if [ -f $lockfile ]; then
  326. echo "Running..."
  327. else
  328. echo "Stopped..."
  329. fi
  330. ;;
  331. *)
  332. echo "Usage: $prog start|stop|restart|status"
  333. exit 1
  334. 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. C#中DllImport用法和路径问题

    DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息.    DllImport属性应用于方法,要 ...

  2. HTTP原理

    HTTP原理 1 简介 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统. HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式. 2.简单快速:客 ...

  3. VS2010 Web网站发布详解

    1.项目某一网站 右键 发布 出来对话框后 发布方法选择文件系统,发布前删除所有现有文件(选择此项) ,然后点击发布就OK了. 2.之后如果只修改aspx页面,编译下无需再次发布,如果修改了类库或.c ...

  4. EasyUI ComboBox默认值

    combobox数据加载完后设置默认值 $('#ck').combobox({ url: '/External/GetAllCk', valueField: 'Ddbh', textField: 'D ...

  5. javaScript hook

    今天在网上搜索了不少资料,基本概念如下: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到 ...

  6. 基于FlashPaper的文档播放器

    本文主要讨论.描述了使用Adobe公司的Flex与FlashPaper产品完成对发布到网上的文档资料进行只读控制,也就是说只允许浏览操作.对下载.打印进行控制. FlashPaper FlashPap ...

  7. 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 ...

  8. 说说C#静态变量的诡异与恶心

    发现一段很诡异的C#代码,见识了静态构造函数这种奇怪的东西: using System; namespace StaticTest { class A { public static int X; s ...

  9. JSP中Session的使用

    JSP session使用方法 <%@page contentType="text/html;charset=GB2312"%><html>  <he ...

  10. POJ 2970 The lazy programmer(优先队列+贪心)

    Language: Default The lazy programmer Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 1 ...