Shell编程基础语法1、Shell编程概述
Shell是⼀个命令⾏解释器,它接收应⽤程序或⽤户的命令,然后调⽤操作系统内核。
Shell还是⼀个功能强⼤的编程语⾔,易编写、易调试、灵活性强。
①Linux系统提供的Shell解析器
[root@hadoop101 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
其中最常⽤的是/bin/sh和/bin/bash
②bash和sh的关系
[root@apple w]# ll /usr/bin | grep bash$
-rwxr-xr-x. 1 root root 964544 4⽉ 11 2018 bash
lrwxrwxrwx. 1 root root 4 7⽉ 9 16:42 sh ->bash
sh是bash的软链接
③Linux默认的解析器是bash
[root@apple w]# echo $SHELL
/bin/bash
④Shell语法总述
2、Shell编程HelloWorld
①创建脚本⽂件
通常以.sh作为扩展名。
②脚本内容
第⼀⾏指定当前脚本的解析器:
#!/bin/bash
实现具体功能:
echo"hello world"
③Shell脚本的运⾏⽅式
命令名在当前进程运⾏新建⼦进程运⾏
source√
.√
sh√
bash√
chmod +x后直接运⾏√
其中“.”是source的另⼀种写法。在当前进程中发布的全局变量可以在当前进程的其他脚本中继续沿⽤,也可以在⼦进程中使⽤;但是⼦进程export发布的变量仅限于⼦进程内部使⽤。
从上⾯进程树中能够看到,sh、bash、直接运⾏这三种⽅式确实是开辟新的⼦进程运⾏脚本中的代码。
3、变量
①系统预定义变量
常⽤系统变量包括:HOME、SHELL等,可以使⽤echo命令输出它们的值。
②使⽤set 命令查看所有变量
ABRT_DEBUG_LOG =/dev/null BASH =/bin/bash
BASHOPTS =checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sou rcepath
BASH_ALIASES =()BASH_ARGC =()BASH_ARGV =()……
③⾃定义变量
[1]基本语法
(1)定义变量
USER_NAME =tom
(2)撤销变量
[root@apple ~]# USER_NAME=tom [root@apple ~]# echo $USER_NAME tom
[root@apple ~]# unset USER_NAME [root@apple ~]# echo $USER_NAME
(3)声明静态变量
[root@apple ~]# readonly COMPANY_NAME=atguigu [root@apple ~]# echo $COMPANY_NAME atguigu
[root@apple ~]# COMPANY_NAME=uuu -bash: COMPANY_NAME: 只读变量[root@apple ~]# unset COMPANY_NAME
-bash: unset: COMPANY_NAME: ⽆法反设定: 只读 variable
不能修改,不能撤销
[2]语法规则
变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议⼤写。等号两侧不能有空格
在bash中,变量默认类型都是字符串类型,⽆法直接进⾏数值运算。变量的值如果有空格,需要使⽤双引号或单引号括起来。
④特殊变量
[1]$n
n是数字,$0代表当前脚本名称。从{10}开始数字需要使⽤{}括起来。
USER 、PWD 、1开始代表对应的脚本参数。从
[root@hadoop101 datas ]$ touch parameter.sh [root@hadoop101 datas ]$ vim parameter.sh #!/bin/bash echo "$0 $1 $2"
[root@hadoop101 datas ]$ chmod 777 parameter.sh [root@hadoop101 datas ]$ ./parameter.sh cls xz ./parameter.sh cls xz
[2]$#
返回输⼊参数的个数
[root@hadoop101 datas ]$ vim parameter.sh #!/bin/bash echo "$0 $1 $2"echo $#
[root@hadoop101 datas ]$ chmod 777 parameter.sh [root@hadoop101 datas ]$ ./parameter.sh cls xz parameter.sh cls xz 2
[3]@
都能够返回全部参数,但是只有在循环中且放在引号中能够体现出它们的区别。
[root@hadoop101 datas ]$ vim parameter.sh #!/bin/bash echo "$0 $1 $2"echo $#echo $*echo $@
[root@hadoop101 datas ]$ bash parameter.sh 1 2 3parameter.sh 1 231 2 31 2 3
[4]$?
返回上⼀条命令的执⾏结果。
条件判断语句
返回0表⽰true 返回1表⽰false 普通语句
返回0表⽰成功返回⾮0数表⽰失败
4、运算符
[表达式]
∗和((表达式))或
[root@apple ~]# echo $((20+30))
50
[root@apple ~]# echo $(((15+15)*2))
60
[root@apple ~]# echo $[(15+15)*2]
60
5、条件判断
①基本语法
写法1:test condition
写法2:[ condition ]
注意condition前后有空格
空字符串视为false,⾮空字符串视为true
②常⽤判断条件
数据类型写法含义数值-lt less than⼩于
数值-le less equal⼩于等于
数值-eq equal等于
数值-gt greater than⼤于
数值-ge greater equal⼤于等于
数值-ne not equal不等于
⽂件-r read有读权限
⽂件-w write有写权限
⽂件-x execute有执⾏权限
⽂件-f file⽂件存在并且是⼀个常规的⽂件
⽂件-e existence⽂件存在
shell代码⽂件-d directory⽂件存在并是⼀个⽬录
6、流程控制
①三⽬运算
[root@apple w]# [ 10 -gt 5 ] && echo "10⼤于5" || echo "10⼩于5"
10⼤于5
②if判断
注意:if后⾯有空格
[1]单if
if[ 10 -gt 5 ]
then
echo"10⼤于5"
fi
[2]if…else
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论