shell学习
运行sh
#可以直接用bash来执行
bash 1.sh
#如需用户./来执行,需要赋予权限
chmod +x 1.sh
./1.sh
变量操作
- 创建普通变量:
name=“test”
,组要注意的是等号两边不能有空格。
- 创建局部变量:
local name=“test”
,使用local修饰的变量在函数体外无法访问,只能在函数体中使用。
- 创建只读变量:
readonly name=test
,这种变量不可以被修改。
- 使用变量:
echo $name
或者echo ${name}
- 删除变量:
unset name
,删除之后的变量无法被访问,需要注意无法删除只读变量。
特殊变量
#获取脚本后面写的参数
$1,$2...
#获取脚本名称
$n
#获取脚本后面有多少参数(可以写if判断或者for循环)
$#
#获取脚本后面的所有参数
$* $@
#获取最后一次执行命令返回的状态
$?
条件判断
整数之间比较大小
-eq 等于(equal) -ne 不等于(not equal)
-lt 小于(less than) -le 小于等于(less equal)
-gt 大于(greater than) -ge 大于等于(greater equal)
按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write) -x 有执行的权限(execute)
[ -w helloworld.sh ]
按照文件类型进行判断
-e 文件存在(existence) -f 文件存在并且是一个常规的文件(file) -d 文件存在并且是一个目录(directory)
多条件判断(三元运算)
&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令
[ atguigu ] && echo OK || echo notOK
流程控制
if 判断
注意事项:
①[ 条件判断式 ],中括号和条件判断式之间必须有空格
②if 后要有空格
if [ 条件判断式 ]
then
程序
fi
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
case 语句
case $变量名 in
"值 1")
如果变量的值等于值 1,则执行程序 1
;;
"值 2")
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
for 循环
语法 1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
sum=0
for((i=0;i<=100;i++))
do
sum=$[$sum+$i]
done
echo $sum
语法 2
for 变量 in 值 1 值 2 值 3…
do
程序
done
for i in cls mly wls
do
echo "ban zhang love $i"
done
while 循环
while [ 条件判断式 ]
do
程序
done
sum=0
i=1
while [ $i -le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo $sum
read 读取控制台输入
read (选项) (参数)
①选项: -p:指定读取值时的提示符; -t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待
②参数 变量:指定读取值的变量名
reat -t 10 -p '输入:' a
echo $a
#输入密码不显示 -n表示不换行 -s表示不显示输入
echo -n "请输入密码:"
read -s password

#查看去除注释和空行的
cat svnserve.conf |grep -v "^#"|grep -v "^$"