一、Shell注释
1.1.单行注释 #
开头的行,就会被注释
#--------------------------------------------
# 这是一个注释
# author:wolves_liu
# site:www.wolves_liu.com
# slogan:学的不仅是技术,更是梦想!
#--------------------------------------------
##### 用户配置区 开始 #####
#
#
# 这里可以添加脚本描述信息
#
#
##### 用户配置区 结束 #####
1.2. 多行注释
:<<EOF # end-of-file
这里面都是注释的内容
EOF
或
:<<!
这里面都是注释的内容
!
二、Shell传递参数
2.1. $0
表示文件名,$1
表示执行脚本的第一个参数,…
echo "The file name is $0!"
echo "The 1th parameter is $1!"
echo "The 2th parameter is $2!"
echo "The 3th parameter is $3!"
执行:
. parameter.sh 1 2 3 //传了三个参数 1 2 3
打印信息为:
The file name is parameter.sh!
The 1th parameter is 1!
The 2th parameter is 2!
The 3th parameter is 3!
2.2.其他用法
参数个数为:$#
echo "将所有参数以字符串显示:$*
#打印 将所有参数以字符串显示:1 2 3
echo "将所有参数以字符串显示:\"$*\"
#打印 将所有参数以字符串显示:“1 2 3”
2.3 $*
和$@
,不加引号时的用法一样。加引号时,“$*”
是传一个参数1 2 3; “$@”
是传三个参数1 2 3
eg:
for i in "$*"; do
echo $i
done
打印:1 2 3
for i in "$@"; do
echo $i
done
打印:
1
2
3
三、shell基本运算符
3.1.基本运算符
val=`expr 2 + 2`
echo $val
# 1)运算符左右要有空格,eg:2+2 错误。要写成2 + 2.
# 2)表达式用反引号` 而不是单引号' 注意区分。
3.2.+ - * /
a1=`expr $a + $b`
a2=`expr $a - $b`
a3=`expr $a \* $b`
a4=`expr $a / $b`
echo $a1 $a2 $a3 $a4
3.3. 条件语句的用法 == !=
if [ $a == $b ]
then
echo "a等于b"
fi
或者
if [ $a == $b ]; then
echo "a等于b"
fi
3.4.文件测试运算符
-f file
:是否为普通文件,如果是,则返回 true。
-r file
:检测文件是否可读,如果是,则返回 true。
file="/net/peknetapp04/jsliu/shell/val.sh"
if [ -f $file ]
then
echo "val.sh is ragular file!"
else
echo "val.sh isn't ragular file!"
fi
四、echo用法
4.1. -e
显示转义字符
echo -e "i love you \n"
4.2. -n
不换行
echo -n "i love you"
4.3. >
打印到指定文件显示
echo you love me > 1
4.4. 单引号,原样输出字符串,不进行转义或取变量
echo '$a'
4.5.显示命令执行结果
echo `date` # Mon Oct 28 17:06:08 CST 2019
五、printf用法
1.用法与c语言的标准函数printf()
一样
printf "hello world %d!\n" 33333 # 打印: hello world 33333!
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg # 姓名 性别 体重kg
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来
%-4.2f 指格式化为小数,其中.2指保留2位小数。
经过试验,一个汉字占三个字符。
2.printf 中单引号与双引号一样
printf 'xinxin %d %s!\n' 666 abc # xinxin 666 abc!
3.格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf 'xinxin %s!\n' abc def
打印如下:
xinxin abc!
xinxin def!
五、test命令:用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
5.1. []
里面执行基本的算数运算
echo $[1+2] # 3
5.2.数值测试
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo "num1 等于 num2"
else
echo "num1 不等于 num2"
fi
5.3.字符串测试
=
,!=
, -z
字符串的长度为零则为真 -n
字符串的长度不为零则为真
str1=abc
str2=bcd
if test $str1 = $str2
then
echo "两字符串相等"
else
echo "两字符串不相等"
fi
5.4.文件测试
-e file
:文件是否存在
cd /net/peknetapp04/jsliu/shell
if test -e ./val.sh
then
echo '文件已存在!'
else
echo '文件不存在!'
fi