Shell 编程(一)
- 为什么学习 Shell 编程?
- 用 shell 来进行服务器的管理或维护
- 对于大数据程序员来说,需要编写 shell 来管理集群
- Shell 是什么?
Shell 是一个命令解释器,它为用户提供了一个 Linux 内核发送请求以便于运行程序的界面系统级程序,用户可以通过shell来启动、挂起、停止甚至是编写一些程序。 - Shell 脚本的执行方式(快速编程)
- 脚本以
#!/bin/bash
开头 - 脚本需要有可执行权限
- 脚本执行方式
- 方式1(输入脚本的绝对路径或相对路径)
- 首先赋予脚本的 +x 权限
- 执行脚本
- 方法2(sh + 脚本)——> 不推荐
- 说明:不用赋予脚本的 +x 权限,直接执行即可
一、Shell 变量介绍
- Linux Shell 中的变量分为:系统变量和用户自定义变量
- 系统变量:$HOME、$PWD、$SHELL、$USER 等等
#!/bin/bash
echo "PATH=$PATH"
- 显示当前 shell 所有变量:set
二、shell 基本语法
- 定义变量:变量=值
- 撤销变量:unset 变量
- 声明静态变量:readonly变量,注意不能 unset
1. shell 变量定义的规则
- 变量名可以由字母、数字和下划线组成,但是不能以数字开头
- 等号两侧不能有空格
- 变量名称一般习惯为大写
2. 将命令的返回值赋给变量
A=`ls -la`
反引号,运行该命令,并把结果返回给变量AA=$(ls -la)
等价于反引号
#!/bin/bash
A=100 #定义变量
echo "A=$A"
unset A #撤销变量
echo "A=$A"
readonly A=99 #定义和使用静态变量
echo "A=$A"
unset A #静态变量不能unset
echo "A=$A"
RESULT=`ls -l/home` #使用反引号
echo $RESULT
echo " "
MY_DATE=$(date) #使用$()来执行
echo "date=$MY_DATE"
小案例:可以把变量提升到全局环境变量,可供其他 shell 程序使用(之后再写)
三、设置环境变量
1. 基本语法
- export 变量名=变量值 (功能:将 shell 变量输出为环境变量)
- source 配置文件(功能:让修改后的配置信息立即生效)
- echo $变量名(功能:查询环境变量的值)
#!/bin/bash
TOMCAT——HOME=/opt/tomcat #定义一个自己的环境变量
export TOMCAT——HOME #输出环境变量
注:可以让上述的环境变量在其他bash 文件中使用
#!/bin/bash
#在另一个shell文件中使用环境变量
#使用我们自定的环境变量
echo "tomcathome=$TOMCAT——HOME"
- 脚本下的多行注释
:<<!
!
四、位置参数变量
当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如: /myshell.sh 100 200,这就是一个执行 shell 的命令行,可以在myshell 脚本中获取到参数信息
1. 基本语法
$n
:n 为数字,$0
代表命令本身,$1
-$9
代表第一到第九个参数,十以上的参数需要用大括号如:${10}
$*
:代表命令行中所有参数,$*
把所有参数看成一个整体$@
:代表命令行中所有参数,不过$@
把每个参数区分对待$#
:代表命令行中所有参数的个数
#!/bin/bash
#获取到各个参数
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"
五、预定义变量
shell 设计者已经定义好的变量,可以直接在shell脚本中使用
1. 基本语法
$$
:当前进程的进程号(PID)$!
:后台运行的最后一个进程号$?
:最后一次执行的命令的返回状态。若谷这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是那个数,由命令自己来决定),则证明上一个命令执行不正确了
#该bash文件名为prevar.sh
#!/bin/bash
echo "当前的进程号=$$"
./myshell.sh & #后台方式运行 myshell.sh
echo "最后进程的号=$!"
六、运算符
1. 基本语法
- "$((运算式))" 或 "$[运算式]"
- expr m + n
- 注意expr运算符间要有空格
- expr m - n
- expr \*,/,% ————> 乘,除,取余
小案例:计算(2+3)× 4,请求出命令行的两个参数(整数)的和
#!/bin/bash
RESULT1=$(((2+3)*4)) #$((运算式))
echo "result1=$RESULT1"
RESULT2=$[(2+3)*4] #$[运算式] 比较简单
echo "result2=$RESULT2"
TEMP=`expr 2 + 3` #使用expr
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"
#两个参数(整数)的和
SUM=$[$1+$2]
echo "SUM=$SUM4"
Shell 编程(一)的更多相关文章
- Linux学习笔记(17) Shell编程之基础
1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find ...
- shell编程:定义简单标准命令集
shell是用户操作接口的意思,操作系统运行起来后都会给用户提供一个操作界面,这个界面就叫shell,用户可以通过shell来调用操作系统内部的复杂实现,而shell编程就是在shell层次上进行编程 ...
- Linux Shell编程入门
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- Shell编程菜鸟基础入门笔记
Shell编程基础入门 1.shell格式:例 shell脚本开发习惯 1.指定解释器 #!/bin/bash 2.脚本开头加版权等信息如:#DATE:时间,#author(作者)#mail: ...
- Linux_10------Linux之shell编程------变量
.-9 vim num.sh #! /bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) #变量sum是num1和num2的综合 echo $sum 执行 ./ ...
- 需要交互的shell编程——EOF(转载)
在shell编程中,”EOF“通常与”<<“结合使用,“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“, 再次返回到主调shell,可将其理解为分 ...
- ****CodeIgniter使用cli模式运行,把php作为shell编程
shell简介 在计算机科学中,Shell俗称壳(用来区别于核).而我们常说的shell简单理解就是一个命令行界面,它使得用户能与操作系统的内核进行交互操作. 常见的shell环境有:MS-DOS.B ...
- Shell 编程基础之变量和环境变量
一.变量赋值和引用 Shell 编程中,使用变量无需事先声明,同时变量的命名不惜遵循如下规则: 首个字符必须为字母(a-z,A-Z)或者_ 变量名中间不能有空格,可以使用_连接 不能使用其他表达符号 ...
- Linux Shell编程基础
在学习Linux BASH Shell编程的过程中,发现由于不经常用,所以很多东西很容易忘记,所以写篇文章来记录一下 ls 显示当前路径下的文件,常用的有 -l 显示长格式 -a 显示所有包括隐 ...
- centos 下建用户 shell编程
useradd 用户名 passwd 用户名 cat /etc/passwd 查看用户信息 删除用户 userdel -r 加一个 -r 表示把用户及用户的主目录都删除 su 切换用户 sud ...
随机推荐
- 第15.33节 PyQt(Python+Qt)入门学习:containers容器类部件QTabWidget选项窗部件简介
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...
- 第14.4节 使用IE浏览器获取网站访问的http信息
上节<第14.3节 使用google浏览器获取网站访问的http信息>中介绍了使用Google浏览器怎么获取网站访问的http相关报文信息,本节介绍IE浏览器中怎么获取相关信息.以上节为基 ...
- python安装Scrapy框架
看到自己写的惨不忍睹的爬虫,觉得还是学一下Scrapy框架,停止一直造轮子的行为 我这里是windows10平台,python2和python3共存,这里就写python2.7安装配置Scrapy框架 ...
- 学习JUC源码(2)——自定义同步组件
前言 在之前的博文(学习JUC源码(1)--AQS同步队列(源码分析结合图文理解))中,已经介绍了AQS同步队列的相关原理与概念,这里为了再加深理解ReentranLock等源码,模仿构造同步组件的基 ...
- apidoc学习(接口文档定义取代word)
apidoc的安装,参考:https://blog.csdn.net/qq_36386771/article/details/82149848 生产文档,需要先编写一个apidoc.json对接口文档 ...
- ADF 第四篇:管道的执行和触发器
Azure Data Factory 系列博客: ADF 第一篇:Azure Data Factory介绍 ADF 第二篇:使用UI创建数据工厂 ADF 第三篇:Integration runtime ...
- 图书管理系统(Java实现,十个数据表,含源码、ER图,超详细报告解释,2020.7.11更新)
图书管理系统数据库设计实验报告 文章目录 更新日志 1.概述 2.需求分析 2.1需要实现的功能 2.2业务流程图 2.2.1学生流程图 2.2.2管理员流程图 2.2.3超级管理员流程图 2.3功能 ...
- Python SQLALchemy框架
SQLALchemy SQLALchemy是Python中的一款优秀的ORM框架,它可以作用于任何第三方Web框架,如flask,tornado等框架. SQLALchemy相较于DjangoORM来 ...
- css进阶 04-如何让一个元素水平垂直居中?
04-如何让一个元素水平垂直居中? #前言 老板的手机收到一个红包,为什么红包没居中? 如何让一个子元素在父容器里水平垂直居中?这个问题必考,在实战开发中,也应用得非常多. 你也许能顺手写出好几种实现 ...
- java_day 02
一.方法的传入参数可以为一个 类 类型 有往方法里传 int ,double ,char 类型的值的,第一次学习到居然还能往方法里传 类 定义好一个 Phone 类 实例化对象 ,并且往 method ...