shell中对返回值的控制:
脚本用exit来指定返回值
如果不写exit,则返回最后运行的命令(函数)的返回值
true命令返回0,false命令返回1
操作符!将返回值取反(0-》1,1-》0),操作符!后必须有空格
&&操作符判断前面一个命令的返回值,如果为0则执行后面的操作
||操作符判断前面一个命令的返回值,如果不为0则执行后面的命令
test 和[ 命令以及bash2引入的内置命令[[ 都用返回值来表示判断结果,操作符后面要有空格
test和[ ---一定要注意空格
-z string string是空的,没有设置
string1 = string2 =(==) < > != 判断字符串
int1 -eq int2 (两个变量或者字符串当成整型变量的时候是否相等) -ne -gt -lt -ge -le greater less
-e file 文件是否存在
-f file 文件是否存在且是普通文件
-d dirname 文件是否存在且是目录
file1 -ef file2 两个文件是否是一个硬链接(have the same device and inode)
尽量不要在test里面做布尔运算
! expression 非
expression1 -a expressio2 与
expression1 -o expression2 或操作
-g file FILE exists and is set-group-ID
-G file FILE exists and is owned by the effective group ID
-k file FILE exists and is owned by the effective group ID
-h /-L file 软连接
if 分支结构(if 后面要有空格,[ ] 里要有空格)
if [ condition ]; then
elif [ ]; then
do sth
else
do sth
fi
case 分支结构:
case "$var" in
$condition1 " ) commands ;;
$condition2 " ) commands ;;
esac
eg:
while read -n 1 -s -p "hit a key" key (-n 1 读入一个字母,-s 不显示出来输入的内容, -p 显示出hit a key)
do
case "$key" in
[[ :lower: ]] ) echo "hit a low";;
...
* ) echo "other";;
esac
done
while/until 循环结构
while : ; do (: 是个死循环)
...
done
for 循环:
for var in [list]
do
commands...
done
for(( exp1;exp2;exp3))
do
commands
done
for 循环写法总结:
1. for((i=1;i<=10;i++)); do let s+=i; don
2. for i in $(seq 10)
3. for i in `ls`
4. for i in ${arr[@]}
5. for i in $*; do
6. for file in /proc/sys/net/ipv4/conf/*/accept_redirects; do
7. for i in f1 f2 f3 ;do
8. for i in *.txt
9. for i in $(ls *.txt)
for i in `cat abc.txt`
for in语句与` `和$( )合用,利用` `或$( )的将多行合为一行的缺陷,实际是合为一个字符串数组
============ -_- ==============for num in $(seq 1 100)