[sh]shell语法小结

参考

基础语法

数字比较 -lt -eq -gt 

[ `ps -ef|grep nginx|grep -v grep|wc -l` -eq 0 ]
str比较  == !=

[ $USER == "root" ]

-z  变量未定义或为空串都会命中-z
[ -z $1 ] 
数字运算

- 整数
echo $((1+2))  # 不能计算小数
echo "1+2"|bc

- 小数
echo "1.2+2.3"|bc
- 文件检测
-f   [ -f /etc/fstab ] && echo 'xx'
-d
-e
-rwx
$? $# 
$0 $1 $2


$?
0 正常
1 失败
- if

if then
fi

if ;then
elif ;then
fi

if [ $age -gt 100 ];then
    echo "age gt 100"
elif [ $age -gt 50 ];then
    echo "get gt 50"
fi
- for

for i in `cat `;do
done


注: for对横排空格分隔 和 一行一个item都支持遍历


- 批量创建用户
for user in `cat user_list.txt`;do
    useradd $user > /dev/null 2>&1
    if [ $? -eq 0 ];then
        echo "created user $user succ"
    else
        echo "created user $user faild"
    fi
done

- 批量ping
for ip in `cat ip_list.txt`;do
    ping -i 0.2 -c 3 -W 2 $ip > /dev/null 2>&1
    if [ $? -eq 0 ];then
        echo "host $ip online"
    else
        echo "host $ip offline"
    fi
done
- while(好处是支持死循环)

while :;do
    read -p '输入新运数字: ' num
    if [ -z $num ];then
        continue
    fi
    if [ $num -gt 100 ];then
        echo "succ"
    else
        echo "faild"
    fi
done
- case分支,  好处是支持正则

while :;do
    read -p "请输入一个字符" char

    case $char in
    [a-z]|[A-Z])
        echo "输出的值是字符"
        ;;
    [0-9])
        echo "输入的是数字"
        ;;
    *)
        echo "default running"
    esac
done

常用命令

find
grep
sed
awk
- cat命令
name="mm"
age=22
cat > file.txt <<EOF
name = $name
age = $age
EOF
> /dev/null 2>&1

文件描述符
0 stdin
1 stdout
2 stderr
- 生成序列
seq -s ' '  10

echo {1..10}
ping命令 
    -i  interval
    -c  count
    -W  timeout

正则

${name}     # 引用变量
$(date +%F) # 表达式

猜你喜欢

转载自www.cnblogs.com/iiiiiher/p/11275591.html