练习题网站
source不开启子进程,其他两种会开启子进程
bash和source无需x权限
a=10
echo ${a}RMB //{}用于隔开变量与常量,避免混淆
export a=10 //发布为全局变量
export -n a //将全局变量恢复为局部变量
$1 执行脚本时后面第1个位置参数
$2 执行脚本时后面第2个位置参数
$3 执行脚本时后面第3个位置参数
$* 执行脚本时后面所有位置参数
$# 执行脚本时后面位置参数的个数
$$ 随机进程号
$? 判断上一条指令是否执行成功,0是成功,非0是失败
创建用户
vim useradd.sh
#!/bin/bash read -p "请输入用户名:" username stty -echo read -p "请输入密码:" passwd stty echo useradd $username echo "$passwd" | passwd --stdin $username
屏蔽回显 stty -echo
恢复回显 stty echo
例子:
expr 1 + 1 expr 2 - 1 expr 1 '*' 1 或 expr 1 \* 1 expr 1 / 1 expr 2 % 1
echo $[1+1] 或echo $((1+1))
let 运算后无任何输出
对变量自增减
bc(支持小数运算)
test a == a 或 [ a == a ]
echo $?
a=abc
b=xyz
[ $a == $b ] //使用变量判断两个变量的值是否相等
[ $a != $b ] //使用变量判断两个变量的值是否不相等
[ "$c" == $b ] //如果变量为空,有可能报错,加双引号可以避免
[ -z $a ] //判断变量是否为空
echo $?
[ ! -z $a ] //判断变量是否非空
&& //条件成功才执行后续指令
|| //条件失败才执行后续指令
当多个逻辑符号组合使用时
A && B //A、B任务都成功算成功
A || B //A、B任务有一个成功算成功
-eq //是否相等
-ne //是否不等
-gt //是否大于
-ge //是否大于等于
-lt //是否小于
-le //是否小于等于
例子:
#!/bin/bash x=`cat /etc/passwd | wc -l` [ $x -gt 10 ] echo "123"
-e //判断文件是否存在,不关心类型
-f //判断文件是否存在
-d //判断目录是否存在
-r //判断当前用户对文件是否有读权限
-w //判断当前用户对文件是否有写权限
-x //判断当前用户对文件是否有执行权限
例子:
[ -d abc ] || mkdir abc //判断是否存在abc目录,如果失败就创建abc
单分支
例子:
#!/bin/bash if [ $UID -ne 0 ];then echo "你不是管理员" fi
双分支
例子:
#!/bin/bash if [ $UID -ne 0 ];then echo "你不是管理员" else echo "你是管理员" fi
判断一个地址通不通:
#! /bin/bash ping -c 3 -i 0.2 -W 1 192.168.2.5 &> /dev/null #-c指定ping次数,-i指定每次ping的时间,-W表示当ping不通时多久返回结果 if [ $? -eq 0 ];then echo "通了!" else echo "不通!" fi
多分支
例子:
#!/bin/bash read -p "猜数字游戏,请猜一个数字:" x if [ $x -eq 5 ];then echo "猜对了!" elif [ $x -gt 5 ];then echo "猜大了!" else echo "猜小了" fi
例子:
#!/bin/bash for i in {1..10} do echo $i done
例子2:
#!/bin/bash #ping测试,如果通x+1,不通则y+1 x=0 y=0 for i in {1..100} do ping -c 1 -i 0.2 -W 1 192.168.1.$i &> /dev/null if [ $? -eq 0 ];then echo "1.$i通了!" let x++ else echo "1.$i不通!" let y++ fi done echo "通了$x台,不通$y台"