Shell 基本语法 | 学习笔记

简介: 快速学习 Shell 基本语法。

开发者学堂课程【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语句

 

image.png

语法:

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 用法 

image.png

语法:

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

相关文章
|
3月前
|
Shell Linux C++
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
39 0
|
3月前
|
Java Shell Linux
Shell编程 学习笔记
Shell编程 学习笔记
69 1
|
4月前
|
Shell Linux Perl
shell 学习笔记
shell 学习笔记
50 1
|
Java 大数据 Shell
Azkaban--使用实战--shell、command 调度 | 学习笔记
快速学习 Azkaban--使用实战--shell、command 调度
655 0
Azkaban--使用实战--shell、command 调度 | 学习笔记
|
11月前
|
Shell 开发工具 Perl
shell学习笔记
shell学习笔记
|
SQL Shell PHP
某教程学习笔记(一):19、任意文件上传和sql语句拿shell
某教程学习笔记(一):19、任意文件上传和sql语句拿shell
79 0
某教程学习笔记(一):19、任意文件上传和sql语句拿shell
|
运维 Java Shell
Linux Shell 训练营 Day3|学习笔记
快速学习 Linux Shell 训练营 Day3。
126 0
Linux Shell 训练营 Day3|学习笔记
|
NoSQL JavaScript 前端开发
Shell 链接&amp;Compass 使用 | 学习笔记
快速学习 Shell 链接&amp;Compass 使用
148 0
Shell 链接&amp;Compass 使用 | 学习笔记
|
SQL 大数据 Shell
Shell 命令行--内外部参数 | 学习笔记
快速学习 Shell 命令行--内外部参数
176 0
|
SQL XML 数据可视化
集成 Oozie 服务&amp;调度 Shell 程序 | 学习笔记
快速学习 集成 Oozie 服务&amp;调度 Shell 程序
102 0
集成 Oozie 服务&amp;调度 Shell 程序 | 学习笔记