shell学习

运行sh

#可以直接用bash来执行
bash 1.sh
#如需用户./来执行,需要赋予权限
chmod +x 1.sh
./1.sh

变量操作

  1. 创建普通变量:name=“test”,组要注意的是等号两边不能有空格。
  2. 创建局部变量:local name=“test”,使用local修饰的变量在函数体外无法访问,只能在函数体中使用。
  3. 创建只读变量:readonly name=test,这种变量不可以被修改。
  4. 使用变量:echo $name或者echo ${name}
  5. 删除变量:unset name,删除之后的变量无法被访问,需要注意无法删除只读变量。

特殊变量

#获取脚本后面写的参数
$1,$2...
#获取脚本名称
$n
#获取脚本后面有多少参数(可以写if判断或者for循环)
$#
#获取脚本后面的所有参数
$* $@
#获取最后一次执行命令返回的状态
$?

条件判断

  • test condition

  • [ condition ](注意 condition 前后要有空格)

整数之间比较大小

-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 值 12 值 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 "^$"