第二十三节、Shell编程

一、什么是shell
  • Shell是操作系统的最外层,Shell可以合并编程语言以控制进程和文件,以及启动和控制其它程序。shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出来管理您与操作系统之间的交互。简单来说Shell就是一个用户跟操作系统之间的一个命令解释器。Shell是用户与Linux操作系统之间沟通的桥梁。用户可以输入命令执行,又可以利用 Shell脚本编程去运行。
  • 最常用的shell是Bash,也就是Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用,也是大多数Linux系统默认的Shell
  • shell脚本就是一堆shell命令的集合,使用脚本可以简化重复的工作,比如可以把LAMP源码安装的命令集成到一个脚本中。相同机器可以直接通过脚本安装.
    shell脚本中带#的都是注释语句,shell不会去解析这些语句,其他语句会依次解析执行
  • 创建一个简单的脚本以及执行脚本三种方法
[root@localhost tmp]# vim first_shell.sh   #创建脚本文件命名
#!/bin/bash   #定义系统使用的shell
#This is my first shell  #注释语句,解释脚本的意义,可以有多行
echo "hello world"   #需要执行的命令
[root@localhost tmp]# ll
-rw-r--r--  1 root root 55 12月 18 20:40 first_shell.sh
[root@localhost tmp]# /bin/bash first_shell.sh   #执行脚本的方法
hello world  #执行结果打印语句
[root@localhost tmp]# sh first_shell.sh  #等价于上一句命令
hello world
[root@localhost tmp]# chmod o+x first_shell.sh  #给脚本添加执行权限
-rw-r--r-x  1 root root 55 12月 18 20:40 first_shell.sh
[root@localhost tmp]# ./first_shell.sh   #在脚本所在目录直接执行脚本,需要执行权限
hello world
[root@localhost tmp]# /tmp/first_shell.sh  #脚本全路径执行,一样需要执行权限
hello world
调试脚本查看脚本的执行过程
#执行脚本时利用参数x,系统会依次解析命令并输出该命令的执行结果,+后面是命令语句,如果执行错误会标注错误语句所在行
[root@localhost tmp]# /bin/bash -x first_shell.sh 
+ echo 'hello world'
hello world
+ hx
first_shell.sh: line 4: hx: command not found  #错误提示信息
+ echo 1
1
+ echo 2
2
打印内容定义颜色,固定格式且必须加参数e,\n表示换行,不同数值可以定义不同颜色

echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"

  1. 字背景颜色和文字颜色之间是英文的“""”
  2. 文字颜色后面有个m
  3. 字符串前后可以没有空格,如果有的话,输出也是同样有空格
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
 
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
控制选项说明 :
\33[0m 关闭所有属性 
\33[1m 设置高亮度 
\33[4m 下划线 
\33[5m 闪烁 
\33[7m 反显 
\33[8m 消隐 
\33[30m -- \33[37m 设置前景色 
\33[40m -- \33[47m 设置背景色 
\33[nA 光标上移n行 
\33[nB 光标下移n行 
\33[nC 光标右移n行 
\33[nD 光标左移n行 
\33[y;xH设置光标位置 
\33[2J 清屏 
\33[K 清除从光标到行尾的内容 
\33[s 保存光标位置 
\33[u 恢复光标位置 
\33[?25l 隐藏光标 
\33[?25h 显示光标 
二、shell的变量
  • Shell编程语言是非类型的解释型语言,不像C++/JAVA语言编程时需要事先声明变量,SHELL给一个变量赋值,实际上就是定义了变量,在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值。
  • SHELL变量可分为两类:局部变量和环境变量。局部变量只在创建它们的shell脚本中使用。而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用。
  • 例如在脚本里面定义A=123 ,定义这样一个变量,前面变量名,后面是变量的值。
    引用变量可以使用$A,必须带$符号
备注:变量一般以字母开头,区分大小写,变量名最好都大写
shell常见的变量
$0 当前脚本的名称
$n 当前脚本的第n个参数,n=1,2,…9
$* 当前脚本的所有参数(不包括程序本身)
$# 当前脚本的参数个数(不包括程序本身)
$? 命令或程序执行完后的状态,一般返回0表示执行成功。
$UID 当前用户的ID
$PWD 当前所在的目录
$$ 脚本的PID号

示例编写一个脚本文件展示效果

[root@localhost tmp]# vim var.sh
#!/bin/bash
#auto print variables
#by wugk 2014-09
echo -e '\033[32m-----------------------------\033[0m'
echo "This is $0 param !"
echo "This \$1 is $1 param !"
echo "This \$2 is $2 param !"
echo "This \$3 is $3 param !"
echo -e '\033[32m-----------------------------\033[0m'
echo "This \$* is $* param !"
echo "This \$# is $# param !"
echo "This \$? is $? param !"
echo "This \$$ is $$ param !"
[root@localhost tmp]# /bin/bash var.sh  a b c  #执行脚本,跟三个参数a/b/c
-----------------------------
This $0 is var.sh param !  #$0代表脚本自身
This $1 is a param !   #$1代表第一个参数a
This $2 is b param !   #$2代表第一个参数b
This $3 is c param !   #$3代表第一个参数c
-----------------------------
This $* is a b c param !    #$*代表所有的参数abc
This $# is 3 param !         #$#代表参数个数3
This $? is 0 param !         #$?代表脚本执行结果0表示正常
This $$ is 1988 param !   #$$代表脚本进程号PID
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容