参数展开是shell提供变量值在程序中使用的过程。如:
aa="hello word"
sleep 10
echo $aa 或 "$aa"
变量展开需用"",如果改为'',则不会展开。echo '$aa',输出为'$aa'
替换运算符
${varname:-word}
$ {varname:=word}
${varname:?message} 如果varname存在且不是null,则返回它的值;否则,显示varname:message后退出脚本。
${varname:+word} 如果varname存在且非null,则返回word;否则,返回null。例,如果count已定义,则${count:+1}返回1。
ps:上述运算符内的冒号都是可选的。如果去掉则将定义中的存在且非null改为存在,即运算符仅用于测试变量是否存在。 |
模式匹配运算符
${var#pattern}
${var%pattern}
例: path=/home/tolstoy/mem/long.file.name ${path#/*/} 结果: tolstoy/mem/long.file.name ${path##/*/} 结果: long.file.name ${path%.*} 结果: /home/tolstoy/mem/long.file ${path%%.*} 结果: /home/tolstoy/mem/long 字符串操作:
${#path} : 返回变量的字符串长度, 为32 ${string:position:length},例{path:6:11} : 返回6-11字符串:tolstoy/mem ${string/substring/replacement} Replace first match of $substring with $replacement ${string//substring/replacement} Replace all matches of $substring with $replacement |
特殊变量: 例
$ set -- hello "hi there" greetings 设置新的位置参数 |
if-elif-else-fi基本语法:例
#! /bin/bash echo "Is it morning? Please answer yes or no." read YES_OR_NO #输入value if [ "$YES_OR_NO" = "yes" ]; then echo "Good morning!" elif [ "$YES_OR_NO" = "no" ]; then echo "Good afternoon!" else echo "Sorry, $YES_OR_NO not recognized. Enter yes or no." exit 1 fi exit 0 ps: "[]"为判断语句,返回1或0。if [pipeline] 等价于 if test pipeline。 因此可在[]中加入test的各种参数。
如:
if [ -f "$file" ] && [ ! -x "$file" ]; then
echo $file is a file but cannot execute
elif [ -d "$file" ]; then
echo $file is a directory
fi
|
case/esac基本语法:
case
命令可类比C语言的switch
/case
语句,esac
表示case
语句块的结束。C语言的case
只能匹配整型或字符型常量表达式,而Shell脚本的case
可以匹配字符串和Wildcard,每个匹配分支可以有若干条命令,末尾必须以;;结束,执行时找到第一个匹配的分支并执行相应的命令,然后直接跳到esac
之后,不需要像C语言一样用break
跳出。#! /bin/bash |
for/in/do/done基本语法:例
#! /bin/bash ps: 如果未写()中内容,则默认执行 for FRUIT in "$#" |
while/do/done基本语法:例
#! /bin/sh |
沒有留言:
張貼留言