shell脚本基本语法

自定义变量
    定义变量
        变量名=变量值
        num=10
    引用变量
        $变量名
        如:i=$num 把变量num的值赋给i
	显示变量
		使用echo命令可以显示单个变量取值
		echo $num
	清除变量
		使用unset命令清除变量
		unset varname
		
		
		
		
变量的其他用法
	read string
		从键盘输入一个字符串付给变量string,若string没定义则先定义再使用
	readonly var=100
		定义一个只读变量,只能在定义时初始化,以后不能改变,不能被清除。
	export var=300
		使用export说明的变量,会被导出为环境变量,其它shell均可使用
		注意:此时必须使用source 2_var.sh才可以生效或者 ".空格"
		
注意事项:
	等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号
括起来;双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符。
	例:name="aa bb"
		echo "$name is me"	//输出:aa bb is me
		echo '$name is me'	//输出:$name is me
		
		
		
		
环境变量
	定义:
		一般在~/.bashrc或/etc/profile文件中(系统自动调用的脚本)使用export设置,允许用
户后来更改。VARNAME = value; export VARNAME
	显示环境变量
		使用env命令可以查看所有的环境变量。
	清除环境变量
		使用unset命令清除变量
常见环境变量:
	HOME:用于保存注册目录的完全路径名。
	PATH:用于保存用冒号分隔的目录路径名,存放含有可执行文件的目录
	HOSTNAME:主机名
	......
	
	

预定义变量:
	$#:传给shell脚本参数的数量
	$*:传给shell脚本参数的内容
	$1、$2、$3、...、$9:运行脚本时传递给其的参数,用空格隔开
	$?: 命令执行后返回的状态
		"$?"用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行
		,任何非0值表示命令出错).
	$0:当前执行的进程名
	$$:当前执行的进程号
		"$$"变量最常见的用途是用作临时文件的名字,以保证临时文件不会重复.
		
脚本变量的特殊用法: "" `` '' \ () {}
	"" (双引号): 包含的变量会被解释
	'' (单引号): 包含的变量会当做字符串解释
	`` (反引号): 反引号中的内容作为系统命令,并执行其内容,可以替换输出为一个变量
	\ 转义字符:
		同c语言 \n \t \r \a等 echo命令需加-e转义
	(命令序列): 
		由子shell来完成,不影响当前shell中的变量
	{命令序列}:
		在当前shell中执行,会影响当前变量
		

		
条件测试
	test命令有两种格式:
		test condition 或 [ condition ]
	shell脚本中的条件测试如下
		文件测试、字符测试、数字测试、复合测试
		
文件测试
	-e是否存在  	-d是否目录	-f是否文件
	-r可读	        -w可写   	-x可执行
	-L符号链接 	-c是否字符设备	-b是否块设备
	-s文件非空
	
字符串测试:
	test str_operator "str"
	test "str1" str_operator "test2"
	[ str_operator "str" ]
	[ "str1" str_operator "str2" ]
	其中str_operator可以是
	= 两个字符串相等	!= 两个字符串不相等
	-z 是不是空串				-n 是不是非空串
	
测试数值格式如下:
	test num1 num_operator num2
	[ num1 num_operator num2 ]
	num_operator可以是:
	-eq 数值相等
	-ne 数值不相等
	-gt 数1大于数2
	-ge 数1大于等于数2
	-le 数1小于等于数2
	-lt 数1小于数2
	
	
控制结构:
	if [ 条件1 ]; then
		执行第一段程序
	elif [ 条件2 ]; then
		执行第二段程序
	else
		执行第三段程序
	fi
	
	----------------------------------------------------------------------------
	
	case $变量名称 in
		"第一个变量内容" )
			程序段1
			;;
		"第二个变量内容" )
			程序段2
			;;
		*)
			其他程序段
			exit 1
	esac	
	
	for (( 初始值; 限制值; 执行步阶))
	do
		程序段
	done
	初始值:变量在循环中的起始值
	限制值:当变量值在这个限制范围内时,就继续进行循环
	执行步阶:每作一次循环时,变量的变化量
	
	declare是bash的一个内建命令,可以用来声明shell变量、设置变量的属性。declare也可以写
	作typeset。
	declare -i s 代表强制把s变量当做int型参数运算。
	
	for var in con1 con2 con3 ...
	do
		程序段
	done
	第一次循环时,$var的内容为con1
	第二次循环时,$var的内容为con2
	第三次循环时,$var的内容为con3
	......
	
	while [ condition ]
	do
		程序段
	done
	当condition成立的时候进入while循环,
	直到condition不成立时才退出循环。
	
	break
		break命令允许跳出循环。
		break通常在进行一些处理后退出循环或case语句
	continue
		continue命令类似于break命令
		只有一点重要差别,它不会跳出循环,只是跳过这个循环步。
		
		
		
函数
	定义函数的两种格式
		函数名 () {                    
			命令
		}
-------------------------------------------------------		
		function 函数名 () {
			命令
		}
		函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中
		所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用
		
		函数调用格式为:
			函数名 param1 param2 ... ...
		使用参数同在一般脚本中使用特殊变量
			$1,$2 ...$9一样
		函数可以使用return提前结束并带回返回值
			return 从函数中返回,用最后状态命令决定返回值
			return 0 无错误返回
			return 1 有错误返回
posted @ 2021-08-25 15:49  liuhengzhi  阅读(204)  评论(0编辑  收藏  举报