变量
your_name="sereny"
echo ${your_name} #花括号可加可不加,推荐给所有变量加上花括号,这是个好的编程习惯。
echo "I am good at ${skill}Script" #加花括号是为了帮助解释器识别变量的边界
#可以二次赋值,第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)。
for file in `ls /etc` #隐式复制赋值
或
for file in $(ls /etc)
readonly myUrl #只读变量
unset variable_name #删除变量,不能删除只读变量。
echo ${#string} #输出 4字符串长度
echo ${string:1:4} # 提取runoob 输出 unoo
echo `expr index "$string" io` # 输出 4 #查找i或者o位置,反引号`
注释多行如下,EOF 也可以使用其他符号单引号,叹号 :<<!andjfn!:
单行#
:<<EOF
注释内容...
注释内容...
EOF
其他参考https://www.runoob.com/linux/linux-shell-variable.html
传递参数
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第一个参数为:$2";
$ chmod +x test.sh
$ ./test.sh 1 2 3
:<<!
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2!
参考:https://www.runoob.com/linux/linux-shell-passing-arguments.html
执行
#1 cd 到相应目录执行:
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
#2作为解释器参数运行
/bin/sh test.sh
/bin/php test.php
数组函数
my_array=(A B "C" D)
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "数组的元素为: ${my_array[*]}"#使用@ 或 * 可以获取数组中的所有元素
运算符
#expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
val=`expr 2 + 2`
echo "两数之和为 : $val"
val=`expr $a \* $b` #转义相乘
echo "a * b : $val"
if [ $a == $b ]
val=`expr $b / $a`
文件-r可读 -w可写 -x可执行
-eq 等于则为真 -ne 不等于则为真
-gt 大于则为真 -ge 大于等于则为真
-lt 小于则为真 -le 小于等于则为真
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
#其他:https://www.runoob.com/linux/linux-shell-basic-operators.html
显示
\c下面的echo不换行 \n换行
echo "It is a test" > myfile #6.显示结果定向至文件
echo '$name\"' #7.原样输出字符串,不进行转义或取变量(用单引号)
echo `date` #8.显示命令执行结果单引号,日期
Thu Jul 24 10:08:46 CST 2014
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 #%-10s 指一个宽度为10个字符
printf "%s and %d \n" #如果没有参数,那么%s用NULL代替,%d 用 0 代替
函数
demoFun(){
echo "这是我的第一个 shell 函数!"
}
funWithParam(){ #函数参数
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
输入输出重定向
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。
source filename #包含外部脚本