Shell 的函数就是一个大坑,坑的人不要不要的,之前写了专门的文章来解读,这里放上总结。
$0-$n
来调用。a
的操作a=$(sum)
,其表示的函数的意义是标准输出,如果要获取返回值需要通过$?
。
$?
表示的含义其实是上一次命令的返回值,所以假如要获取返回值,一定要在函数执行的下一行使用该变量
shell 脚本中,分号通常用在一行的 shell 脚本但是有多个模块存在的情形。比如下面这个脚本
# 一行的写法
if [ "$PS1" ]; then echo "are you ok"; fi
# 多行写法
if [ "$PS1" ]
then echo "are you ok"
fi
这个空格是把我坑惨了的地方,因为我写Java\C#\Kotlin
都会将空格来美化,但是 Shell 脚本对此定义不同。有些地方必须加,有些地方不能加。
赋值的语句不能加空格
# 合法
i=1
i=$((i++))
# 不合法
i = 1
i = $((i++))
if 条件语句判定必须加
# 合法
if [ i -eq 1 ]
echo "ok"
fi
#不合法1,i前面没有空格
if [i -eq 1 ]
echo "ok"
fi
#不合法2,1 后面没有空格
if [ i -eq 1]
echo "ok"
fi
遵循一个原则:除了特定要加的地方二外,其他都不要加空格。
${}
通常是取值操作$(command)
同 command
,都是执行其中的命令,然后将标准输出赋值给变量(如果有)(())
双括号通常有 2 个含义
((i++))
表示对 i
进行自增for
的条件:((i = 1; i <= 10; i++))
[ command ]
通常用在循环语句中做判定条件。[[ command ]]
同样可以用于作为判定,不过此判定更加健壮可以再其中写条件i=6
# 这种写法合法
if [[ $i -ge 5 && $i -le 10 ]]; then
echo "success"
fi
# 这种写法不合法
if [ $i -ge 5 && $i -le 10 ]; then
echo "success"
fi
# 如果用单括号,需要改为
i=6
if [ $i -ge 5 ] && [ $i -le 10 ]; then
echo "success"
fi