#!/bin/bash
num=1
while [ 20 -gt $num ]
do
URL="xxx"
wget $URL
num=$(($num+1))
sleep 2
done
3.2 For
for 变量 [ in 列表]
do
Expression
done
注:for随着列表元素取完而停止
3.3 Until
until
expression1
test expression
do
expression2
done
/**********************************************************************************************************************************************/
========== ||**Shell**||-->运算成分:算数操作符 ==========/**********************************************************************************************************************************************/
一、普通算数操作符
+ 加
- 减
* 乘
/ 除
% 取模
** 幂运算
/**********************************************************************************************************************************************/
二、自操作运算符
+=
-=
*=
/=
%=
/**********************************************************************************************************************************************/
========== ||**Shell**||-->函数 ==========1.定义
a)最简洁形式: 函数名{...}
b)完整形式: function 函数名(){.....; ....; return}
注:
a) return:函数返回
b) exit: 退出当前脚本
c)
declare -f 显示定义的函数清单
declare -F 显示定义函数名列表
export -f 将函数输出给Shell
unset -f 从Shell内存中删除函数
2.调用
1)本地调用
a)将函数定义在 .bash_profile 中。直接命令行调用。
b)sh脚本中定义、调用。
2)脚本间调用
使用其他脚本中的函数,通过“source”或“.”命令把其他脚本装入内存。
3.参数
只有位置变量可以传递参数。
4.变量作用域
a)函数内部使用local关键字定义局部变量。
b)非local定义的变量在脚本的全局范围内有效。
5.返回值
a) return:可以返回0~256之间的任意值到主程序调用处。
b) 返回值保存在主程序接续的$?中。
c) 不指定return的返回值,则返回最后一条被执行命令的退出状态值。
6.
a) Shell支持函数嵌套:可在函数A中定义并调用B函数。
b) 支持递归
/**********************************************************************************************************************************************/
========== ||**Shell**||-->其他 ==========/**********************************************************************************************************************************************/
一、
重定向 cmd > file cmd的输出重定向到file
cmd >> file cmd的输出追加到file的末尾
cat > file stdin重定向到file
cmd < file file作为cmd的stdin
>/dev/null 2>&1 将stdout和stderr合并输出到/dev/null,忽略输出。可以当作注释写法。
/dev/null: 空设备文件
1: 文件描述符1;1代表STDOUT_FILENO
2: 文件描述符2;2代表STDERR_FILENO
0: 键盘输入
&: 等同于
>/dev/null ="1>/dev/null":将标准输出(fd=1)重定向到空设备文件。
2>&1 标准错误(fd=2)等同于fd=1重定向到1的重定向设备中。
注:command >file 2>&1
将stdout直接送向file,stderr继承fd1的管道,被送往file。
整个过程file只被打开一次,只使用了一个管道FD1,但包括了stdout和stderr的内容。
/**********************************************************************************************************************************************/
二、
通配符? 匹配任意单个字符
[] 匹配[]字符集中的单个字符
[$1-$n] 匹配[]中的连续数字/字符范围(1-n)
* 匹配任意长度字符
{$ , $} 匹配{}中的各个字符串
/**********************************************************************************************************************************************/
三、
Source命令/点命令. ./xxx.sh <=> source ./xxx.sh
(1)source是在当前bash环境下执行file。通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
(2)source a.sh 同直接执行 ./a.sh 有什么不同呢?
比如你在一个脚本里export $KKK=111 ,如果你用./a.sh执行该脚本,执行完毕后,你运行 echo $KKK ,发现没有值,
如果你用source来执行 ,然后再echo ,就会发现KKK=111。
因为调用./a.sh来执行shell是在一个子shell里运行的,执行后结构并没有反应到父shell里,但source是在本shell中执行的,所以可以看到结果
/**********************************************************************************************************************************************/
四、
echo格式 -n 不输出最后的\n
-e解释转义字符
-E不解释转义字符
/**********************************************************************************************************************************************/
五、
/**********************************************************************************************************************************************/
六、
测试空变量if [ X "$aa" = X ];then
echo "aa is empty!"
fi
七、
自增 i++、自减 i--tmp=100
tmp=$(($tmp-1))
八、true冒号(Shell内建指令)=true
: ${JOBS:=}
: 空命令,什么也不做。但 ${JOBS:=} 会被当作 : 命令的参数进行解析。
九、cut
1.处理格式
cut [-opt] [domain] [file]
2.参数
-opt:
-b //:byte,以字节(8位二进制位)来计算输出
-c //:character,以字符为单位输出
-f [-d delim][-s] [file] //:field
-n //与-b同时使用。告诉cut输出时不分割多字节字符。
#subPara:
-d 分隔符(delimiter).默认为TAB
-s 表示不包括那些不含分隔符的行(有利于去掉注释和标题)
3.Domain:
N 只有第N项
N,M 第N项与第M项
N- 从第N项一直到行尾
N-M 从第N项到第M项(包括M)
-M 从一行的开始到第M项(包括M)
- 从一行的开始到结束的所有项
4./*PMP*/
[rocrocket
@rocrocket programming
]$
cat cut_ch.txt
星期一
星期二
星期三
星期四
[rocrocket
@rocrocket programming
]$ cat cut_ch.txt |
cut -b 3