列表:
Linux笔记——命令:Sort,uniq,join,cut,paste,split
Linux笔记——shell基础:变量&本地变量&位置变量&特定变量参数
鉴于博客,表格&排版&颜色标记等等无法显示,大家可以下载这个笔记的资源
12个文档,不需要积分,以目录+表格+颜色标记形式
下载资源地址http://download.csdn.net/detail/wklken/3815477
The end! Thx! wklken的笔记
-----------------------------------------------
控制流
If then else语句 |
格式 |
if 条件1 then 命令1 elif 条件2 then 命令2 else 命令3 fi |
if 条件 if 条件;then then 命令 等价 命令 fi fi |
示例 |
1. 简单的if语句 $if [ “10” –lt “12” ] > then > echo “10 is less than 12” >fi 2. 直接上命令 $if grep “dave” data.file > /dev/null 2>&1 >then > echo “Dave in” > else > echo “Dave not in” >fi 3. 测试文件拷贝是否成功 $if cp myfile myfile.bak > then > echo “Good copy” > else > echo “basename:$0:could not copy” >fi 4. 当前目录测试 $DIRECTORY=`pwd` //反引号 $if [ “$DIRECTORY” != “/” ] >then > echo “Not root” >exit 1 >fi 5. 文件权限测试 $LOGFILE=test.txt $if [ ! –w “LOGFILE” ] >then > echo “you cannot write to $LOGFILE” >&2 >fi 6.变量设置测试 $if [ -z $EDITOR ] >then > echo “Your EDITOR environment is not set” >else > echo “Using $EDITOR as the default editor” >fi 7.可以多个if 嵌套,但注意层次 $if [ -d $DIR] >then > cd $DIR > if [ $? = 0 ] > then > do something > fi >fi 8.多个检测值 $if [ “$ANS” = “y” ] || [ “$ANS” = “Y” ] 注意: if [ “$myvar” == “yes” ]; then # do something ... fi 检查变量 当不确定变量是否存在时,加双引号通常是安全的做法。 |
Case语句 |
格式: |
case variable in pattern [| pattern] …..) 命令…. ;; 模式2) 命令….. ;; *) ……. ;; esac 注意,每个模式行都以双分号结尾 把最精确的匹配放在最前面 |
示例: |
1. 简单的case语句 read ANS case $ANS in 1) echo “1” ;; 2) echo “2” ;; *) echo “not right” exit 1 ;; esac 2. 匹配模式使用 read ANS case $ANS in v100|v101) echo “1” ;; V102) echo “2” ;; *) echo “not right” exit 1 ;; esac 3. 提示输入y/n read ANS case $ANS in y|Y|yes|Yes) echo “yes is selected” ;; n|N) echo “no is selected” ;; *) echo “`basename $0` :Unknown response” exit 1 ;; esac |
for循环 |
格式 |
for 变量名 in 列表 do 命令1 命令2 done |
示例: |
1. 简单的for循环 for loop in 1 2 3 4 5 do echo $loop done 2. 打印字符串列表 for loop in “orange red blue grey” do echo $loop done 3. 打印当前命令下的所有文件 for loop in `ls` do echo $loop done 4. 对for循环使用参数 脚本中,for params in “$@” 等价于 for params for params do echo “You supplied $params in $@” done 5. 多文件转换 for files in `ls LPSO*` do cat $files | tr “[a-z]” “[A-Z]” >$files done 6. 循环计数 counter=0 for files in * do counter = `expr $counter + 1` done 7. for循环的嵌套 for 变量1 in 列表1 do for 变量2 in 列表2 do 命令 done done bash中的for循环写法 #!/bin/bash for i in 1 2 3 4 5 6 7 8 9 10; do # do something done for i in `seq 1 10`; do # do something done for i in {1..10}; do # do something done for ((i = 1; i <= 10; i++)); do # do something done |
until循环 |
执行一系列命令直到条件为真时停止 Until循环与while循环处理方式上刚好相反 如果循环至少要执行一次,使用while,如果可能根本不需要执行,使用until |
格式: |
until condition do 命令….. done 测试发生在循环末尾,所以至少执行一次 |
示例: |
1. 简单的until测试 IS_ROOT=`who | grep root` until [ “$IS_ROOT” ] do sleep 5 done 2. 监视文件被删除 LOCK_FILE=”temp” until [ ! –f $LOCK_FILE ] do sleep 1 done echo “file deleted” 3. 监视磁盘空间 LOCK_OUT=`df | grep /logs | awk ‘{print $5}’| sed ‘s/%//g’ ` echo $LOCK_OUT until [ “$LOCK_OUT” –gt “90” ] do echo “File system.Logs is nearly full” exit done |
while循环 |
用于不断执行一系列命令,也用于从输入文件中读取数据 |
格式: |
while condition do 命令1 命令2 done |
示例: |
简单的while命令 COUNTER=0 while [ $COUNTER –lt 5 ] do COUNTER=`expr $COUNTER + 1` echo $COUNTER done 1. 循环读文件 while read LINE do echo $LINE 2. 读文件不同字段 while read DEPT ITEMS ….. done < total.txt 3. 每次读一对记录 while read rec1 do read rec2 echo “$rec1” echo “$rec2” done <record.txt 4. 忽略注释行 while read LINE do case $LINE in \#*) ;; *) echo $LINE ;; esac done |
补充;break和continue控制循环 |
Break |
允许跳出循环,通常在进行一些列处理后退出循环或case语句 若多重循环,可指定跳出的循环个数,如跳出两重循环 break 2 命令不执行当前循环体内break下面的语句 从当前循环退出. 在控制条件未满足之前,跳出for,while,until循环,可以为break提供一个额外参数来表明需要跳出的循环层数 默认只跳出一层循环 |
示例: |
1. 跳出case case $ANS in 1|2|3) Do something break; ;; *) ;; esac |
continue |
不会跳出循环,只是跳过此循环步 命令是程序在本循体内忽略下面的语句,从循环头开始执行. 跳到下一次循环继续执行 |