赋值
FILE=$1 //=两边不能有空格 echo $FILE
逻辑判断
表达式 1、if [ expression ]; then ... fi //[]两边必须有空格 2、 if [[ expression ]]; then ... fi 3、 if expression1 -o expression2; then elif expression; then else fi 组合判断条件 -a: and -o: or !: 非 命令间逻辑关系 && || //和其他语言意义一致 eg1: 判断a大于b并且小于c 1、 if (( a > b )) && (( a < c )) 2、 if [[ $a > $b ]] && [[ $a < $c ]] 3、 if [ $a -gt $b -a $a -lt $c ]
-eq | == |
-ne | != |
-gt | > |
-ge | >= |
-lt | < |
-le | <= |
-z string | 字符是否为空,空为真,非空为假 |
-n string | 是否为不空,空为假 非空为真 |
-e FILE | 文件是否存在 |
-f file | 文件是否为普通文件 |
-d file | 是否为目录 |
-r file | 文件对当前用户是否可读 |
-w file | 文件对当前用户是否可写 |
-x file | 文件对当前用户是否可执行 |
-z | 是否为空 为空则为真 |
-a | 是否不空 不空为真 |
循环
# for
for((i=1;i<=10;i++))
do
sth
done for i in $(seq 1 10) for i in {1..10} awk 'BEGIN{for(i=1; i<=10; i++) print i}' for i in `ls`; for i in f1 f2 f3 ; list="GOD always love you!" for i in $list; for file in /bin/*;
do
echo $line
done
# while
while true
do
sth
done
#switch
case $char in
[A-Z][a-z])
sth
;;
[0-9])
sth
;;
*)
sth
esac
文本读写
for line in `cat filename` do echo $line done
for line in $(cat filename) do echo $line done
while read -r line #-r选项保证读入的内容是原始的内容,意味着反斜杠转义的行为不会发生 do echo $line done < filename
远程访问
ssh faith@$ip "grep 'DecodeBlob Error' /data/datac20181106/GameServer*/ERROR/*.log
Note
$? 上个命令执行成功,则为0,否则为1-255间的一个 $# 传参个数 $n 参数值 ((exp)) exp可以不加$引用 set -e 发生错误立刻退出
sh -n ***.sh 检查shell语法
//判断上个命令执行是否成功 raise() { if [ $? != 0 ]; then echo "$1"; exit 1 ;fi }