开发者学堂课程【Shell 编程入门到精通:Shell 基本语法】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/453/detail/5595
Shell 基本语法
内容简介:
一、Shell 基本语法
二、变量
三、表达式
四、判断语句
五、if表达式
六、综合实例
一、 Shell 基本语法
(1)简单 shell 构成方法
#!/bin/bash
#!跟 shell 命令的完全路径。
作用:显示后期命令以哪种 shell 来执行这些命令。如不指 shell ,以当前 shell 作为执行的 shell 。
[root@xuegod63 test]# ll/bin/sh
lrwxrwxrwx.l root rooot 4 Dec 18 2012/bin/sh -> bash
#This is to show what a example looks like
.以 shell 中以#开始头表示,整个行被当作一个注释。
执行时被忽略。
Shell 程序一般以 .sh 结尾。
(2)创建 shell 程序的步骤
第一步:创建一个包含命令和控制结构的 shell 文件。
第二步:修改这个文件的权限使它可以执行。
使用 chmod +x
第三步:执行
方法1:√example01.sh
方法2: 使用绝对路径 [root@xuegod63 test]# /root/test/example01.sh
方法3:[root@xuegod63 test]# bash example01.sh
二、变量
(1)变量的赋值方法
在使用变量值时,要在变量名前加上前缀”$”;变量赋值时赋值号”=”两边应该没有空格。
例1:
[root
@xuegod63 test]# A=aaa
[root@xuegod63 test]# A = aaa
Bash:A:command not found
例2:可以利用变量和其他字符组成一个新的字符串
[root
@xuegod63 test]# MYDIR=/home/mk
[root
@xuegod63 test]# echo $MYDIR/zhangsan
/home/mk/zhangsan
[root
@xuegod63 test]# DAY=mon
[root
@xuegod63 test]# echo Today is $DAYday
Today is
[root
@xuegod63 test]# echo Today is $DAY day
Today is mon day
[root
@xuegod63 test]# echo Today is ${DAY}day
Today is Monday
例3:给变量赋值多个单词
[root
@xuegod63 test]# NAME=“mike Ron
”
[root
@xuegod63 test]# echo $NAME
mike Ron
[root
@xuegod63 test]# NAME=
’
shen mk
’
[root
@xuegod63 test]# echo $NAME
shen mk
[root
@xuegod63 test]# NAME=
”
mike Ron $NAME
”
[root
@xuegod63 test]# echo $NAME
mike Ron shen mk
[root
@xuegod63 test]# NAME=
’
mike Ron $NAME
’
[root
@xuegod63 test]# echo $NAME
mike Ron $NAME
(2)列出所有的变量
set 命令
例:
[root
@xuegod63 test]# set | grep DAY
DAY=mon
(3)单引号与双引号在变量中的区别
单引号之间的内容原封不动地指定给了变量;双引号取消了空格的作用,特殊符号的含义保留。
(4)删除变量
[root
@xuegod63 test]# echo $NAME
mike Ron $NAME
[root
@xuegod63 test]# unset NAME
[root
@xuegod63 test]# echo $NAME
(5) 特殊变量和位置变量
位置变量需知: $0 这个程序的文件名 example.sh ; $n 这个程序的第 n 个参数值,n =1..N。特殊变量需知: $* 这个程序的所有参数; $# 这个程序的参数个数; $$ 这个程序的 PID ; $!执行上一个后台程序的 PID ; $? 执行上一个指令的返回值。
三、表达式
(1) Read 命令
可以使 shell 命令有交互,从键盘读入数据,赋给变量。
(2) expr 命令
作用: Shell 变量的算数运算; expr 命令:对整数型变量进行算术运算;语法:
expr 表达式 #注意 数据与运算符之间要有空格;加减乘除中,乘法需要加\*。
(3)复杂运算
[root
@xuegod63 test]# var4=8
[root
@xuegod63 test]# expr `expr 5 + 11`/$var4
2
四、判断语句
(1)字符串和变量
test $str1 == $str2
是否相等
test $str1!=$str2
是否不相等
test $str1
如果 $str1 不为空,则返回结果为真
test -n $str1
如果字符串长度不为零,则返回结果为真
或
test -z $str1
如果字符串长度为零,则返回结果为真
需注意:在引用 $str1 和 $str2 时一定要加双引号
(2)整数
test int1 -eq int2
test int1 -ge int2 >=
test int1 -gt int2 >
test int1 -le int2 <=
test int1 -lt int2 <
test int1 -ne int2
说明:也可以省略 test 写成: [ int1 -lt int2 ]
(3)文件
test -d file #测试结果是否为目录
test -f file
test -x file
test -r file
test -w file
test -e file 测试文件是否存在
test -s file 测试大小是否为空。是否为空文件
说明:
test -x file 简写成: [ -x file ]
五、if表达式
(1)if语句
语法:
if 条件
then
语句
fi
扩展:分号,表示两个两个命令写在一行,互不影响。
例:
cat if.sh
#!/bin/bash
echo
“
if test
”
if [ -x /bin/ls ];then
/bin/ls
fi
echo
“
= = = = = = = = = = = = = = =
“
if[ -x /bin/ls ]
then
/bin/ls
fi
运行结果:
[root
@xuegod63 test]# ./if.sh
if test
example01.sh expr.sh if.sh read.sh z1.sh z.sh
= = = = = = = = = = = = = = = = = =
example01.sh expr.sh if.sh read.sh z1.sh z.sh
(2)if/else 用法
语法:
if 条件1 ; then
命令1
else
命令2:
Fi
(3)多个条件的联合
-a 或 && :逻辑与,仅当两个条件都成立时,结果为真
-o 或 || :逻辑或。两个条件有一个成立,结果为真
(4)更复杂的 if 语句
语法:
if 条件1 ;then
命令1
elif 条件2 ;then
命令2
elif 条件3 ;then
命令3
else
命令4
fi
六、综合实例
[root
@xuegod63 test]# cat elif.sh
#!/bin/bash
echo
“
input a file name:
”
read file_name
if [ -d $file_name ];then
echo
“
$file_name is a dir
”
elif [ -f $file_name ];then
echo
“
$file_name is file
elif [ -c $file_name -o -b $file_name ];then
echo
“
$file_name is a device file
”
else
echo
“
$file_name is an unknow file
”
fi