目录
expr
select
case
seq
break continue exit return
expr
expr命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
expr也是一个手工命令行计数器。
[root@localhost script]# expr 10 + 10
20
[root@localhost script]# expr 10 - 8
2
[root@localhost script]# expr 2 \* 3 反斜线屏蔽其特定含义
6
[root@localhost script]# expr 30 / 3 / 2
5
select
select 表达式是一种bash的扩展应用,动作包括:
(1)、自动用1,2,3,4列出菜单 (没有echo指令,自动显示菜单)
(2)、自动read输入选择 (没有 read指令,自动输入)
(3)、赋值给变量 (没有赋值指令,自动输入数字后,赋值字符串给变量)
#!/bin/bash
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other";
do
break select本身就是一个循环,break是当选择后,就跳出循环
done
echo "You have selected $var"
虽然select本身就是循环,但不建议用他的循环 ,因为select虽然循环却不再显示菜单,只循环输入,所以seleckt 语句干脆直接用break,只执行一次,在其上另配while循环
#!/bin/bash
while echo "display current netconfig:"
do
select vi in "ifconfig -a" "hosts" "netmasks" "quit"
do
case $vi in 虽然输入是1,2,3,4,5,但case变量输入值却是菜单项(字符串)
"ifconfig -a") /sbin/ifconfig -a;;
"hosts") more hosts;;
"netmasks") more netmasks;;
"quit") exit 0;;
*) continue;;
esac
break
done
done
这样以后菜单也跟着循环
case
格式 case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;] esac
范例 case "$1" in
start)
...
;;
stop)
...
;;
reload|restart)
...
;;
*)
echo "$usage: $0 {start|stop|reload|restart}"
RETVAL=2
esac
case里面的每一个分支变量中要想将空格作为字符串的一部分,就得加上引号 "reload program")
seq
用法:seq [选项]... 尾数
或:seq [选项]... 首数 尾数
或:seq [选项]... 首数 增量 尾数
以指定增量从首数开始打印数字到尾数。
-f, --format=格式 使用printf 样式的浮点格式
-s, --separator=字符串使用指定字符串分隔数字(默认使用:\n)
-w, --equal-width 在列前添加0 使得宽度相同
--help 显示此帮助信息并退出
--version 显示版本信息并退出
如果省略了首数或者增量,则默认其值为1,即使这样尾数仍小于首数。
首数、增量和尾数均以浮点数形式解释。当首数小于尾数时增量一般为正值,
相反在首数大于尾数时增量一般为负数。
指定的格式必须适用于显示"double"类型的参数;当首数、增量和尾数均为指定
精确度的定点十进制数时默认为"%.精确度f",否则默认为"%g"。
从1循环到100的两种方法(bash 其它的shell没试过)
for x in `seq 1 100`;do echo $x;done
for x in {1..100};do echo $x;done
输出1-100中,不包含数字7,且不能被7整除的数
seq 100 | grep -v "7" | awk '$0%7!=0{print}'
另外,不用 seq 的话还可以这样:
[root@ubuntu]# for i in {1..10};do echo $i;done
1 和 10 之间是两个半角的点
-f 最常用 , 例如一次制做 10 個名 dir001 , dir002 .. dir010 的目錄,它便很有用途,我們可以
這樣下一個命令便可了
seq -f 'dir%03g' 1 10 | xargs mkdir
或
mkdir $(seq -f 'dir%03g' 1 10)
它用的是 printf 的格式 , %03g' 代表以三位浮點數,以此方法,如用bash3 的 printf
也可作為等價命令
printf 'dir%03d\n' {1..10} | xargs mkdir 或 mkdir `printf 'dir%03d ' {1..10}`
awk 當然也可以
awk 'BEGIN { while (num < 10 ) printf "dir%03d\n", ++num ; exit}' | xargs mkdir
這樣會比寫一個腳本快, 不必寫成
for dir in 001 002 003 004 005 006 007 008 009 010
do
mkdir dir${dir}
done
我也常用 seq 下載一些用數字的 jpeg , 只要格式有數字順序便可,尤以一些 xxx site ;)
for i in `seq -f '%02g' 1 20`
do
if ! wget -P $HOME/tmp -c [img]http://www.xxxsite.com/photo/$i.jpg[/img] ; then
wget -P $HOME/tmp -c $_
fi
done
-s 選項主要改變輸出的分格符, 預設是 \n , 就是 newline
如用 -s 便可改變 , 如
seq -s ' ' 1 10
1 2 3 4 5 6 7 8 9 10 , 以空格作為分格,
break continue exit return
break
结束并退出循环
continue
在循环中不执行continue下面的代码,转而进入下一轮循环
exit
退出脚本,
常带一个整数给系统,如 exit 0
return
在函数中将数据返回
或返回一个结果给调用函数的脚本