Shell脚本编程

一、Shell语言概述

Shell是一个命令行解释器,接收应用程序/用户命令,调用操作系统内核。

Shell是一个功能强大的编程语言。

二、Shell解析器

查看Linux解析器
cat /etc/shells
	(/bin/sh、/bin/bash 最常见)
	/bin/sh			/sbin/nologin		/bin/tcsh
	/bin/bash		/bin/dash			/bin/csh
sh是bash的软连接,sh最终还是调用bash。
bin目录下执行:
ll | grep bash
查看默认解析器
echo $SHELL

三、Shell脚本入门、编写HelloWorld

touch helloworld.sh
指定解析器,通过相对路径执行脚本需要有执行权限
#!/bin/bash
echo "helloworld"
执行脚本
sh helloworld.sh
./helloworld.sh

四、Shell中的变量

在bash值中,变量类型默认都是字符串,无法直接进行数值运算,例如:D=1+1,输出D(echo $D=1+1)输出结果不是2。

变量值有空格需要使用双引号或者单引号括起来,例如:E=“I Love You ”,输出E(echo $E)

系统变量

$HOME 				$USER 			$PWD 				$SHELL
当前用户家目录		    当前用户		 当前用户绝对路径		当前解析器
自定义变量(等号两边不能有空格)
A=1
撤销变量
unset 变量名
(unset A)
静态变量
readonly 变量名=值
(readonly B=2)
静态变量不能被撤销
unset B 不能被执行
全局变量
export 变量名(将变量提升至全局变量,可供其他的shell程序使用)
定义变量C,将变量C提升至全局变量
C=3
export C
特殊变量
$n:n为数字,0代表脚本名称,1~9表示第一到第九个参数,10以上的参数需要使用{}括起来,例如:${10}
	例如:编写脚本输出该脚本名称、输入参数1、输入参数2、输入参数3的值。
		touch parameter.sh
		vim parameter.sh
			#!/bin/bash
			echo "$0 $1 $2 $3"
		sh parameter.sh 输出脚本名称
		sh parameter.sh 1 输出脚本名称、1
		sh parameter.sh 1 2 输出脚本名称、1、2
		sh parameter.sh 1 2 3 输出脚本名称、1、2、3
$#:获取所有输入参数的个数,常用于循环

$*:这个变量代表命令行中的所有参数,将所有参数当做整体
$@:这个变量代表命令行中的所有参数,将所有的参数区别对待。

$?:判断上一个命令的执行返回状态,变量值为0代表上一个命令执行成功,返回非0代表上一个命令执行失败,(具体返回哪一个值可以自己指定。)

五、运算符

1$((运算式)) 或 $[运算式]
	使用运算式,需要赋值个变量
	例如:使用运算式 计算 (2+3)*5 的值
		A=$(((2+3)*5)			B=$[(2*3)*5]
		echo $A					echo $B
2、expr + - \* / %
	expr 运算符之间要有空格,不需要赋值给变量
	例如:使用运算符 计算 (2+3)*5 的值
		expr `expr 2 + 3` \* 5	

在这里插入图片描述

六、条件判断语句

1[ condition ] condition(条件表达式)前后要有空格;条件表达式非空即为true,[ you ] 返回true,[ ] 返回false 
2、两个整数之间的比较
	= 字符串比较
	-eq 等于 (equal)			-ne 不等于 (not equal)
	-lt 小于 (less than) 		-le 小于等于 (less equal)
	-gt 大于 (greater than)	-ge 大于等于 (greater equal)
3、按照文件的执行权限判断
	-r 有读的权限 (read)			-w 有写的权限 (write)
	-x 有执行的权限 (exceute)
4、按照文件类型进行判断
	-f 文件存在、且是一个常规文件 (file)
	-e 文件存在 (existence)
	-d 文件存在,且是一个目录 (directory)
5、多条件判断
	&& 表示前一条命令执行成功时,才执行后一条命令
	|| 表示前一条命令执行失败后,才执行后一天命令
6、实例
	23 是否大于等于 32			anaconda-ks.cfg 文件是否有读的权限
	[ 23 -ge 32 ]			[ -r anaconda-ks.cfg ]
	ehco $?						ehco $?	

在这里插入图片描述

七、流程控制

if判断
	if [ 条件判断语句 ];then				if [ 条件判断语句 ]
		程序									then
	fi												程序
										fi
	if 后面要有空格,条件判断表达式的 前 后 都要有空格。
实例:判断输入的数字 -eq 1,echo 100;输入的数字 -eq 2,echo50;输入的参数 -ne 1或者 -ne 2,echo 25cat > if.sh << EOF
	#!/bin/bash
	if [ $1 -eq 1 ];then
	echo 100
		elif [ $1 -eq 2 ];then
	echo 50
		elif [ ] ];then
		echo 25
	fi
	EOF
case语句
	case $变量名 in
		"值1")
			如果变量的值 -eq 值1,执行此
		;;
		"值2")
			如果变量的值 -eq 值2,执行此
		;;)
			省略其他分支
		*)
			如果变量的值 -ne 值1 && -ne 值2,执行此
		;;
		esac
实例:判断输入的数字 -eq 1,则echo 100;输入的数字 -eq 2,则echo 50;输入的参数 -ne 1 && -ne 2,echo 25cat > case.sh << EOF
	#!/bin/bash
	case $1 in
		"1")
			echo 100
		;;
		"2")
			echo 50
		;;
			省略其他分支
		*)
			echo 25
		;;
		esac
	EOF

八、循环

for循环
	for((初始值;循环控制条件;变量变化))		for 变量 in 值1,值2,值3....... 
		do 									do
			程序									程序
		done								done
实例:从1加到100
	cat > for.sh << EOF
	#!/bin/bash
	sum=0
	for((i=1;i<=100;i++))
		do
			sum=$[$i+$sum]
		done
	echo $sum
    EOF
while循环
	while [ 条件表达式 ]
		do 
			程序
		done
example:
	touch while.sh
	vim while.sh
	#!/bin/bash

	sum=0
    i=1
    while [ $i -le 100 ]
    do
       sum=$[$sum + $i]
       i=$[$i + 1]
    done

    echo $sum
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值