Shell
#!
是一个约定的标记,告诉系统这个脚本需要什么解析器来执行
创建shell脚本文件可以在终端运行touch test.sh
、再打开open test.sh
可以通过
chmod +x ./test.sh //使脚本有执行权限
./test.sh
或者sh test.sh
, bash test.sh
变量
Name=“这是个名字” # =两边不要留下空格
readonly Name # 如果需要变量为已读变量, 使用readonly
echo $Name
#输出变量
unset Name #删除变量,后续不会打印
echo $Name #不会打印出任何信息
字符串
可以用单引号或者双引号。单引号里的任何字符都会原样输出,内如再包括一对单引号,可以做字符串拼接,双引号里面可以有变量,也可以有转义字符
name=“名字”
greeting = “hello name’ !’ #使用单引号拼接 hello 名字 !
获取字符串长度: ${#name}
提取字符串: #{string:0:1}
#字
数组
用括号表示数组或者直接下标赋值
Array=(1, 2, “3”, ‘d’)
Array[0]=10
echo {Array[@]} #输出所有数组
数组个数: ${#Array[@]}
或${#Array[*]}
单个元素长度: ${#Array[0]}
多行注释
:<<EOF
这里的内容会被注释
EOF
:<<‘
还可要这样注释
’
参数
$#
传递到脚本的参数个数
$*
以一个单字符串显示所有向脚本传递的参数。
如"1 n"的形式输出所有参数
$@
与@"用「"」括起来的情况、以"2" … "$n" 的形式输出所有参数
运算符
两数之和: val=expr 2 + 2
#加号前后需要有空格
-eq
两个数是否相等
-ne
两个数是否不相等,不相等返回true
-gt
左边是否大于右边
-lt
左边是否小于右边
-ge
左边是否大于等于右边
-le
左边是否小于等于右边
-o
或运算
-a
与运算
-z
检测字符串长度是否为0.如 [ -z a -le file ]
-d
是否为目录
-r
是否可读
-s
文件是否为空,不为空返回true
-e
是否存在
file=“/var/www/runoob/test.sh”
if [ -r $file ] then
echo “文件可读” #echo后面可以不带双引号输出
fi
echo
echo 后面直接字符串输出时,可以不带双引号
echo -e “ok! \c”
echo “不换行”
echo “显示结果定向至文件” > myfile
条件语句
if [ $a == $b ]
then
echo “a 等于 b”
elif [ $a -gt $b ]
echo “a 大于 b”
fi
如果需要写成一行,用分号隔开
if [ $a == $b ]; then echo "a 等于 b"; elif [ $a -gt $b ]; echo "a 大于 b" fi
循环语句
for loop in 1 2 3 4 5 #也可以使用while, 将本行换成 while(condition)
do
echo "value is: $loop"
done
until循环与while循环相反,一直执行,直到条件为真
a=0
until [ ! $a -lt 10 ]
do
echo $0
a=`expr $a + 1`
done
case语句与c的switch语句类似
read num
case $num in
1) echo '你选择了1'
;;
2) echo '你选择了2'
;;
*) echo '你输入了1、2外的其他值'
;;
esac
跳出循环使用break或continue
函数
demoFun(){
echo '这是个shell函数'
echo '带参数$1' #1
}
demoFun #执行函数
demoFun 1 2 3 4 5 #这里带参数执行函数
重定向
echo "这些文字" > file #file文件保存字符串,会覆盖
echo "这些文字" >> file #文件末尾保存,不覆盖
command > /dev/null # 如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null
网友评论