12、Linux Shell编程

一、shell 基本介绍

  • shell是一个命令行解释器,使用它可以向Linux内核发送请求以便运行程序的界面系统程序,用户可以使用shell来启动,挂起,停止或编写一些程序。
  • shell脚本的格式要求:
    1、脚本要以#!/bin/bash开头
    2、shell脚本需要可执行权限
  • 脚本的常用执行方式
    1、方式一:输入脚本的相对路径或绝对路径 {需要先赋予脚本可执行权限}
    2、方式二:sh 脚本名:[ 例:sh test.sh:执行test.sh脚本 ] {这个方式不需要可执行权限}

二、shell 的变量

  • shell 变量介绍
    1、Linux shell中的变量分为,系统变量和用户自定义变量
    2、系统变量:如$HOME
    3、显示当前shell中的所有变量:set
  • shell 变量定义
    1、定义变量:变量名=值 [ 例:val=10定义变量“val”并赋值为10 ] { 重要 :使用变量时变量名前必须加$例如:$val }
    2、撤销变量:unset 变量名 [ 例:unset val:撤销变量“val” ]
    3、声明静态变量:readonly 变量名 [ 例:readonly va=10l:将变量“val”声明为静态变量并赋值为10 ] {声明为静态变量后不能撤销 }
  • shell变量定义的规则
    1、变量名称有字母、数字、下划线组成,但是不能以数字开头
    2、等号两边不能有空格
    3、变量名称一般习惯为大写
  • 将命令的返回值赋值给变量
    1、A='命令':[ 例:A='data':将获取到的日期赋值给变量A ] *{命令需要使用单引号括起来}
    2、A=$(命令):[ 例:A=$(data):此命令同上,写法上区别而已 ]

三、设置环境变量

  • 基本语法
    1、export 变量名=变量值 :[ 例:export TEST_HOME=/data/test:将“TEST_HOME”环境变量设置为“/data/test” ] {将shell变量输出为环境变量/全局变量 }
    2、source 配置文件:[ 例:source /etc/profile:使此配置文件生效 ] {使得修改后的配置信息立即生效}
    3、:<<! 内容 !:shell脚本中的多行注释 {需要注意的是:<<!!要单独占用一行 }
    4、# 内容:shell脚本中的单行注释

四、shell的命令行参数变量

  • 什么是命令行参数:sh test.sh 10 20,在执行脚本是后面的参数就是命令行参数,命令行参数可以是多个。
  • $n:[ 例:$3:代表获取到第三个命令行参数 ] {$0:表示命令本身,n可以是1-9,即代表1-9位置的参数,如果命令行参数过于多大于9了怎么办,不用担心,&{10}用大括号括起来即可 }
  • $*:此方法将获取到所有命令行参数并将此作为一个整体
  • $@:此方法将获取所有命令行参数,但不同的是它会将每个参数区分开,可以循环遍历
  • $#:此方法将获取命令行参数的个数

五、预定义变量

  • 基本介绍:指的是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
  • $$:获取当前进程的进程号(PID)
  • $!:后台运行的最后一个进程的进程号(PID)
  • $?:在shell中执行的最后一条命令的状态,若为:0 表示命令正常执行,若不为:0 则证明命令执行出现错误。

六、shell编程中的运算符

  • "$((运算式))" 或 $[运算式] 或 expr m + n{ 这就是shell中运算式的写法 其中使用``将expr括住。而且运算符两侧要有空格 }
  • \* , / , % , + , - :分别对应 乘、除、取余、加、减。

七、条件判断

  • if [ condition ]{ 条件判断语句,(condition表示条件或状态)要注意:condition前后要有空格 }
  • 字符串比较:
    1、=:比较字符串是否相等
  • 整数比较
    1、-lt:小于
    2、-le:小于等于
    3、-eq:等于
    4、-gt:大于
    5、-ge:大于等于
    6、-ne:不等于
  • 判读文件权限
    1、-r:有读的权限
    2、-w:有写的权限
    3、-x:有执行的权限
  • 判断文件类型
    1、-f:文件存在并且是一个常规文件
    2、-e:文件存在
    3、-d:文件存在并且是一个目录
  • 与 或 非
    1、-a:与 [ 例:[ val -gt 10 -a val -le 30 ]:表示“10 <= val <= 30" ]
    2、&&: 与 [ 例:[ val -gt 10 ] && [ val -le 30 ]:表示“10 <= val <= 30" ] {注意以上两种与写法上的区别}
    3、-o:或 [ 例:[ val -gt 10 -o count -le 20 ]:表示”10<=val 或 count<=20" ]
    4、||:或 [ 例:[ val -gt 10 ] || [ count -le 20 ]:表示”10<=val 或 count<=20" ]
    5、!:非 [ 例:[ ! val -gt 10 -a val -le 30 ]:表示"val<10 与 val >30 ]
  • 条件判断示例
    1、判断str1于str2是否相等
	if [ str1 = str2 ]; then 
 		echo "equal" 
	fi #表示结束判断

2、判断是否num1是否大于等于num2

	if [ num1 -ge num2 ]; then
		echo "大于或等于"
	fi

3、判断文件是否存在(path表示文件路径)

	if [ -f path ]; then 
		echo "存在"
	else 
		echo "不存在"
	fi

八、流程控制

  • if 判断基本语法
    1、单分支
	if [ 条件判断式 ]; then
		代码
	fi

2、多分支

	if [ 条件判断式 ]; then 
		代码
	elif [ 条件判断式 ]; then
		代码
	else
		代码
	fi
  • case 语句
	case $变量名 in
	"值1")
		代码
	;;
	"值2")
		代码
	;;
	*)	#不满足以上条件则会执行此处
		代码
	;;
	esca	#结束case语句
  • for 循环
    1、基本语法 1
	for 变量 in 值1 值2 值3...
	do
		代码
	done

2、基本语法 2

	for (( 初始值;循环控制条件;变量 ))	#两个括号
	do
		代码
	done
  • while 循环
	while [ 条件判断 ]
	do
		程序
	done
  • read 读取控制台输入
    read(选项)(变量){选项:-p :指定读取时的提示符;-t:指定读取时的等待时间,如果指定时间内没有输入,则不再等待;}
    1、读取控制台输入的数值
	read -p "请输入一个数字:" num1
	echo "您输入的数字为:$num1"

2、读取控制台输入的数字并在3秒内完成输入

	read -d 3 -p "请输入一个数字:" num2
	echo "您输入的数字为:$num2"

九、函数

  • 系统函数
    1、basename : 功能 :返回路径最后“/”后的部分,常用于截取文件名
    basename pathname suffix{ [suffix]为可选项,会将pathname中的suffix删除 返回剩余部分}
	basename /home/bulid/test.txt		#将返回test
	basename hello123 123 	#将返回J“hello”

2、dirname:功能:返回路径最后"/“前面的部分
dirname pathname: [ 例:dirname /home/build/test.txt:将返回”/home/build ]

  • 自定义函数
	fun() {
		代码
	}
  • 自定义函数使用例子
    1、两数相加(有返回值)
	fun_add() {
		val=`expr $1 + $2`	# 这里的$1、$2表示是传递进来的参数
		echo $val
	}
	result=$(fun_add $1 $2)	# 这里的$1、$2表示命令行传递进来的参数,这样写会将val赋值给result
	echo "result = $result"

2、两相加(无返回值)

	fun_add() {
		val=`expr $1 + $2`
		echo "val = $val"
	}
	fun_add $1 $2	# 这样写会直接打印
  • 26
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值