# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用 printf %s abc def #输出 abcdef printf "%s\n" abc def #输出 # abc # def printf "%s %s %s\n" a b c d e f g h i j #输出 # a b c # d e f # g h i # j
# 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替 printf "%s and %d \n" #输出 and 0
# 如果以 %d 的格式来显示字符串,那么会有警告,提示无效的数字,此时默认置为 0 printf "The first program always prints'%s,%d\n'" Hello Shell #输出 # -bash: printf: Shell: invalid number # The first program always prints 'Hello,0'
八. Shell中条件语句
1. if语句
if [ 表达式 ] then 语句 fi
if [ 表达式 ] then 语句 else 语句 fi
if [ 表达式] then 语句 elif[ 表达式 ] then 语句 elif[ 表达式 ] then 语句 …… fi
1 2 3 4 5 6 7 8 9 10
a=10 b=20 if [ $a == $b ] then echo "a is equal to b" else echo "a is not equal to b" fi 或 if test $[2*3] -eq $[1+5]; then echo 'The two numbers are equal!'; fi;
test 命令用于检查某个条件是否成立,与方括号([ ])类似
2. case语句
取值后面必须为关键字in,每一模式必须以右括号结束。
取值可以为变量或常数。
匹配发现取值符合某一模式后,其间所有命令开始执行至;;处。
;;与其他语言中的break类似,意思是跳到整个case语句的最后。
如果无一匹配模式,使用星号*捕获该值,再执行后面的命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
case 值 in 模式1) command1 command2 command3 ;; 模式2) command1 command2 command3 ;; *) command1 command2 command3 ;; esac
九. Shell中循环语句
1. for循环
列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。
每循环一次,就将列表中的下一个值赋给变量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
for 变量 in 列表 do command1 command2 ... commandN done
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
#!/bin/bash for FILE in $HOME/.bash* do echo $FILE done
2. while循环
1 2 3 4 5 6 7 8 9 10 11
while command do Statement(s) to be executed if command is true done
COUNTER=0 while [ $COUNTER -lt 5 ] do COUNTER='expr $COUNTER+1' echo $COUNTER done
3. until循环
until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。
1 2 3 4 5 6 7 8
until command do Statement(s) to be executed until command is true done
Shell函数必须先定义后使用 function_name () { list of commands [ return value ] }
也可以加上function关键字: function function_name () { list of commands [ return value ] }
调用函数只需要给出函数名,不需要加括号。
函数返回值,可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值。
Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。
函数的参数可以通过 $n
1 2 3 4 5 6 7 8 9
funWithParam(){ echo "The value of the first parameter is $1 !" echo "The value of the second parameter is $2 !" echo "The value of the tenth parameter is ${10} !" echo "The value of the eleventh parameter is ${11} !" echo "The amount of the parameters is $# !" # 参数个数 echo "The string of the parameters is $* !" # 传递给函数的所有参数 } funWithParam 1 2 3 4 5 6 7 8 9 34 73
# 获取前一秒时间 date -d "1 seconds ago" "+%Y-%m-%d %H:%M:%S" date -d "1 seconds ago 2010-01-11 13:24:59" "+%Y-%m-%d %H:%M:%S"
# 获取前一分钟时间 date -d "1 minutes ago" "+%Y-%m-%d %H:%M:%S" date -d "1 minutes ago 2010-01-11 13:24:59" "+%Y-%m-%d %H:%M:%S"
# 获取前一小时时间 date -d "1 hours ago" "+%Y-%m-%d %H:%M:%S" date -d "1 hours ago 2010-01-11 13:24:59" "+%Y-%m-%d %H:%M:%S"
# 获取前一天的日期 date -d "1 days ago" +%Y-%m-%d date -d "yesterday" +%Y-%m-%d date -d "2018-12-17 -1 day" +%Y-%m-%d date -d "-1 day 2018-12-17 13:24:59" "+%Y-%m-%d %H:%M:%S"
# 获取前一周的日期 date -d "1 weeks ago" +%Y-%m-%d date -d "2018-12-18 -1 week" +%Y-%m-%d