02-Linux C语言高级-shell脚本编程

Shell脚本的本质

  • 编译型语言(c)
  • 解释型语言
    shell脚本语言是解释型语言
    shell脚本的本质:shell命令的有序集合

shell编程的基本过程

  • 创建.sh的shell文件
    包含任意多行操作系统命令或shell命令的文本文件
  • 赋予shell文件执行权限
    chomd命令修改权限
  • 执行shell文件
    直接在命令行上调用shell程序

shell变量

shell将任何变量的值都解释为一串字符串
echo打印shell变量的时候,需要在变量前加$符

Bourne Shell有如下四种变量

  • 用户自定义变量
    建议shell变量大写
    unset 变量:清除变量值

  • 位置变量(命令行参数)
    -$0:与键入的命令行一样,包含脚本文件名
    -$1,$2…$9:分别包含第一个到第九个命令行参数
    -$@:包含所有命令行参数
    -$*:等价于$@
    -$# 命令行输入参数个数

  • 预定义变量

  • 环境变量
    export:查看所有环境变量
    env:查看环境变量

shell程序和语句

包括三类语句

说明性语句

#号标识的语句为说明语句,不被解释执行
脚本中第一行对脚本语句是有影响的:
**#!/bin/sh**
该句用于告诉OS用哪种类型的shell来解释执行该程序

功能性语句

shell命令、用户程序

read

read 从标准输入读入一行,并赋值给后面的变量,需要注意的是,输入的所有都被保存成字符串,包括空格
如何实现不换行?
 	#!/bin/bash
 	echo -n "input a number:"   #在bash中
 	#!/bin/sh
 	echo "input a number:\c"		#在sh中

expr

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串

#!/bin/bash
VALUE='expr 2 + 3 \* 2'   #运算符和数字之间要有空格隔开,否则报错
echo $VALUE

test

test语句测试三种对象:字符串、整数、文件属性
字符串
test “$answer” = “yes”
!=:两字符串是否有差异
-z s1:测试s1是否长度为0
-n s1:测试s1是否长度不为0
整数
test $num -eq 18
-ne:是否不等
-gt:是否大于后者
-ge:是否大于等于后者
-lt:是否小于后者
-le:是否小于等于后者
文件属性
test -d tmp
-d name:测试name是否为一个目录
-e name:测试文件是否存在
-f name:测试name是否为普通文件
-L name:测试name是否为符号链接
-r name:测试name是否可读
-w name:测试name是否可写
-x name:测试name是否可执行
-s name:测试name是否存在且其长度不为0
f1 -nt f2:f1是否比文件f2更新
f1 -ot f2:f1是否比文件f2更旧

结构性语句

条件语句、多路分支语句、循环语句、循环控制语句等

if…then…fi
if…then…elif…else…fi

read V
case $V in
		yse | Yes | YES | y | Y)
			...
			;;
		no)
			...
			;;
		*)
			...
			;;
esac

循环语句for

#!/bin/bash
#for  变量名  in 单词表
#		do
#			命令表
#		done
#变量一次取单词表中的各个单词,每取一次单词,就执行一次循环体中的命令。循环次数由单词表中的单词数确定。命令表中的命令可以是一条或由分号或换行符分开的多条
#如果单词表示命令行上的所有位置参数时,


#for I in 1 2 3 4 5
#example1
for I in 'ls /dev'
do
	echo "$I"
done

#example2
SUM=0
for I in 'seq 1 100'
do
	SUM='expr $SUM + $I'
done
echo $SUM

#example3
for ((I = 1;I <= 10; I++))
do
	echo "I=$I"
done
#example4
for ((;;))
do 
	echo "for"
done

循环语句while

#!/bin/bash
#while 表达式或命令
#do 
#	命令表
#done

shell函数调用

(vim中输入:vsp file)
调用格式:
1、ret=‘function_name [ ]’ #该函数的所有标准输出都传递给主程序的变量(ret)
2、function_name [ ]
echo $? #获取函数返回

全局变量:创建变量默认都为全局变量
局部变量:在变量前添加local

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值