shell基础——容易上手的脚本语言


定义

Shell是什么

•shell既是一种命令语言,又是一种程序设计语言
•是一个环境,提供了对linux(unix)系统的接口
•向用户接收输入,并根据输入执行程序,显示程序的输出
•可以运行用户的命令,程序和shell脚本

对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Unix/Linux系统的关键


Shell的分类

•就像有不同类型的系统一样,shell也有不同版本,每个版本都有自己的一套命令和功能
•UNIX shell写于20世纪70年代中期,由斯蒂芬·伯恩,再新泽西AT&T贝尔实验室

  1. Bourne shell 提示符 $

Bourne shell 包括 Bourne shell (sh)、Korn shell(ksh)、Bourne Again Shell 三种类型。

  1. C shell 提示符 %

C shell包括csh、tcsh两种类型


Shell脚本解释器

查看系统默认的shell
echo $SHELL

[root@single conf]# echo $SHELL
/bin/bash

bash由于易用和免费,在日常工作中被广泛使用。同时,bash也是大多数Linux系统默认的Shell脚本解释器。

查看系统支持的shell
cat /etc/shells

[root@single conf]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

Shell规范

  1. Shell脚本的文件名以.sh为扩展名 例如:test.sh
  2. Shell脚本的文件应该赋予执行权限(刚创建的文件没有执行权限)
    chmod u+x test.sh
  3. 一个规范的Shell脚本在第一行会指出由哪个解释器来执行脚本中的内容,这一行内容在Linux中的编程一般为:#!/bin/bash
  4. Shell脚本的执行方式
    ./test.sh

命令

控制台输入/输出

	echo [-n] "..."		控制台输出
	read VAR			控制台输入

case:

#!/bin/bash
echo -n  "please enter your name => "
read NAME
echo "your name is $NAME"

result:

[root@single shell]# ./test.sh 
please enter your name => jun
your name is jun

注释

	单行:#...
	多行::<<!...!

case:

#!/bin/bash
:<<!
echo -n  "please enter your name => "
read NAME
echo "your name is $NAME"
!
echo "break"
#echo -n "hello shell"

result:

[root@single shell]# ./test.sh 
break

变量

语法格式:变量名=变量值

•数字、字母、下划线、一般字母大写
•值可以是一个数字、文本、文件名、设备或任何其他类型的数据,不可以是指针
•shell可以创建,分配和删除变量

变量类型

类型 含义
局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。可以用过set命令查看当前环境变量
shell变量 由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell 的正常运行

变量用法

  1. 局部变量
创建
NAME="henry"
AGE=18
使用
echo "$NAME,$AGE"
echo $NAME
取消
unset NAME
常量
readonly NAME

case:

[root@single shell]# NAME="JUN"
[root@single shell]# AGE=22
[root@single shell]# echo "$NAME,$AGE"
JUN,22
[root@single shell]# unset NAME
[root@single shell]# echo "$NAME,$AGE"
,22

[root@single shell]# NAME="jun"
[root@single shell]# readonly NAME
[root@single shell]# echo $NAME
jun
[root@single shell]# NAME="kun"
-bash: NAME: readonly variable
  1. 环境变量

全局环境变量:跨实例访问
临时环境变量:当前登录有效的临时环境变量

export -p		#列出所有环境变量
export -n VAR	#删除环境变量VAR
export VAR		#添加环境变量VAR
[root@single shell]# export -p
declare -x CLASS_PATH=".:/opt/software/jdk180/lib/tools.jar:/opt/software/jdk180/lib/dt.jar"
declare -x HADOOP_HOME="/opt/software/hadoop/hadoop260"
declare -x HBASE_HOME="/opt/software/hadoop/hbase120"
···
[root@single shell]# export jun
[root@single shell]# export -p
···
declare -x jun
[root@single shell]# export -n jun
[root@single shell]# export -p
···
  1. shell变量
符号 含义
$$ 当前shell进程编号
$0 当前脚本的文件名
$n 脚本参数
$# 脚本参数的数量
$* 脚本参数的完整集合
$@ 脚本参数的独立集合
$? 上一条命令的执行结果状态值或函数的返回值:0表示正常,1表示失败
$! 最后一个后台命令的进程号
	$* 和 $@ 的区别
不加"两者相同
加上"则$*代表整体,而$@代表个体

猜你喜欢

转载自blog.csdn.net/weixin_48482704/article/details/110383862