shell脚本的一些知识内容

#系统交互
#图形界面或命令行(dos/shell/hdfs-dfs)/程序->系统api->系统->硬件
#shell
#what
#是一个环境,提供了对linux(unix)系统的接口
#向你接受输入,并根据输入执行程序,并显示程序的输出。
#可以运行我们的命令,程序和shell脚本
#classification
#就行有不同类型的系统一样,shell也有不同版本,每个版本都有自己的一套命令和功能
#UNIX shell写于20世纪70年代中期,有斯蒂芬·伯恩。在新泽西AT&T贝尔实验室
Bourne shell . 提示符 $
C shell . 提示符 %
#shell脚本
#命令列表中列出的顺序执行

	#创建->编辑->保存
	vi test.shell
	#!/bin/bash
	...
	esc :x
	
	#修改权限
	chmod u+x test.sh
	
	#执行
	./test.sh
	
#命令 
	#echo [-n] "..."   控制台输出
	#read VAR 			控制台输入
		echo "What's your name?"
		read NAME
		echo "my name is $NAME"
	#注释
		#单行: #...
		#多行:  :<<!   !
	#变量:数字、字母、下划线,一般字母大写
		#值可以是一个数字、文本、文件名、设备或任何其他类型的数据,不可以是指针
		#shell可以创建,分配和删除变量
			#创建
				NAME="henry"
				AGE=18
			#使用
				echo "$NAME,$AGE"
				echo $NAME
			#取消
				unset NAME
		#常量
			readonly FINAL="1001"
		#变量分类
			局部变量:当前实例有效
			环境变量:跨实例访问,就是全局变量
				当前登录有效的临时环境变量
				export VAR
					export -p #列出所有环境变量
					export -n VAR #删除环境变量VAR
					export VAR #添加环境变量VAR
			shell变量:
				$$ 当前shell进程编号
				$0 当前脚本的文件名
				$n 脚本参数				如:./one.sh henry 18 ,则脚本中的$1位henry,$2位18
				$# 脚本参数的数量		如上例  :2
				$* 脚本参数的完整集合   如上例 : henry,18
				$@ 脚本参数的独立集合   如上例 : henry,18
					#  $*  vs  $@
						#不加"两者相同
						#加上"则$*代表整体,而$@代表个体
				$? 上一条命令的执行结果状态值或函数的返回值:0表示正常,1表示失败
				$! 最后一个后台命令的进程号。
	#数组
		#标准变量:保持一个类型一值的变量
		#数组:支持不同类型的变量,可以在同一时间容纳多个值
			#创建赋值
				NAME=(aa 18 true)
				NAME[0]="henry"
				NAME[1]="pola"
				NAME[2]="ariel"
			#使用
				echo $NAME 			#首元素
				echo ${NAME[0]}	#第一个元素
				echo ${NAME[1]}
				echo ${NAME[2]}
				echo ${NAME[*]}	#所有元素
				echo ${NAME[@]}
				echo ${#NAME[*]}	#数组长度
		#运算符
			#算数运算符
				#shell早期末设计算术,但可以使用外部程序awk或expr
					#expr expr与运算符和其他值之间【必须有空格】,所有的算术计算,使用长整数
						#*需要转义字符\*
						#不支持小数计算
						VAL=`expr 2 + 2`
						let "VAL=2**3"
						VAL=$((2+3))
						echo $VAL
					# + - * / % = ++ --
						[ 2 == 2 ] #=>true
						[ 2 != 2 ] #=>false
			#关系运算符
				# -eq -ne -lt -le -gt -ge
			#布尔运算符
				# ! -o -a 
					[ 2 -lt 3 -o 5 -gt 3 ]
				# || &&
					[[ 2 < 3 || 5 > 3 ]]
			#字符串运算符
				#二元: ==  !=
					=~
						[[ $var =~ PATTERN ]]
						不加\"
						#正则匹配
						^	开始
						$	结束
						.	一个任意字符
						[]	指定范围 [abc] [a-z] [^a-b1-9]
						\< 单词开始
						\> 单词结束
						\b	单词开始或结束
						\B 	非单词开始或结束
						?	{0,1}
						+	{1,}
						*	{0,}
						{n,m}	最少n,最多m
						{n,}	最少n次
						{,m}	最多m次
						{f}		固定f次
						\		转义符
						()		组合
						|		或
		#一元:-z(是否为空) $str(是否不为空)
	#文件测试操作(一元左置)
		#-e -d -f -r -w -x -s(not empty)
	#特殊表达式
		`` <==> $()					#命令替换符,兼容性``更好
			OUTPUT=`start-all.sh`
			...
		(())						#算术运算加强版
			# ++ -- **
		$(()) <=> $[]				#算术运算,$(())中变量可以加$也可可以不加
		[]							#test命令
		[[]]						#字符串计算加强版
			# && ||
		${}
			${STR#*WORD}  			#若STR符合WORD,将最短(WORD和左侧)的删除 <=> ${STR%WORD}(WORD和右侧)
			${STR##*WORD}			#若STR符合WORD,将最长(WORD和左侧)的删除 <=> ${STR%%WORD}(WORD和右侧)
			${STR/WORD/REPLACE}		#若STR符合WORD,将第一个匹配项替换为REPLACE
			${STR//WORD/REPLACE}	#若STR符合WORD,将所有匹配项替换为REPLACE
			${STR:-DF_VALUE}		#若STR未赋值或为空值,则设定STR值为DF_VALUE
			${ARRAY[IX]}			#获取数组ARRAY下标IX的元素
			${#ARRAY[@]}			#获取数组ARRAY的长度(ITEM1 ITEM2 ... ITEMN)
			${ARRAY[*]}				#整个数组
			
			
			
			双引号中不能使用\
			单引号中不能使用$
	#日期
		DATE = `date +"%Y-%m-%d %H:%M:%S"` #2020-11-24 20:11:57
		DATE = `date +"%Y-%m-%d %X"`	#2020-11-24 08:16:04 PM
		DATETIME = `date +%S`		    #1606220048 秒
	#命令代替
		OUTPUT=`command`  #先执行命令,等到命令执行结束,将结果赋值给OUTPUT后,
		才会执行之后的命令,除非启动的是后台进程
		 
	#变量代替

	#输入输出重定向
		标准输入	System.in  read  NAME     < 或者两个 
		标准输出	System.out  echo /cat   > 覆盖  两个>是追加
		OUTPUT >或者>> FILE
		
		
		
		
		#分支结果

if [ $# -eq 0 ]
then
echo “need one arguement”
exit 0
fi
TYPE="$1"
if [ $TYPE == “start” ]
then
echo “start …”
elif [ $TYPE == “stop” ]
then
echo “stop …”
elif [ $TYPE == “restart” ]
then
echo “restart …”
else
echo “not support : $1”
fi

case $1 in
1|3|5)
echo “红烧肉 ¥18.00”
;;
2|4)
echo “卤肉火烧 ¥28.00”
;;
6|7)
echo “肥牛 ¥28.00”
;;
*)
echo “非法星期 $1”
;;
esac

V=“henry pola ariel”
V=($V)
echo ${V[1]}
for val in ${V[*]}
do
echo $val
done

IX=0
while [ $IX -lt ${#V[*]} ]
do
echo KaTeX parse error: Expected '}', got 'EOF' at end of input: {V[IX]}
((IX++))
#IX=expr $IX + 1
done

IX=1
until [ $IX -gt 10 ]
do
echo $IX
((IX++))
done

select choice in start stop restart exit
do
case $choice in
start)
echo “start …”
;;
stop)
echo “stop …”
;;
restart)
echo “restart …”
;;
exit)
echo “exited”
exit 0
;;
*)
echo “not support”
;;
esac
done

for i in seq 1 3 100
do
echo $i
done

sum1=0;sum2=0
for i in seq 1 10
do
b= ( ( ( i − 1 ) ∗ 50 + 1 ) ) e = (((i-1)*50+1)) e= (((i1)50+1))e=((i50))
for j in seq $b $e
do
rst1= ( ( j r s t 2 = ((j%3)) rst2= ((jrst2=((j%7))
rst3= ( ( (( ((rst1
$rst2))
if [ $rst3 -ne 0 ]
then
continue
fi
if [ r s t 1 − e q 0 ] t h e n ( ( s u m 1 + = rst1 -eq 0 ] then ((sum1+= rst1eq0]then((sum1+=j))
fi
if [ r s t 2 − e q 0 ] t h e n ( ( s u m 2 + = rst2 -eq 0 ] then ((sum2+= rst2eq0]then((sum2+=j))
fi
rst= ( ( (( ((sum1+$sum2))
if [ r s t − g e 5000 ] t h e n e c h o " i = rst -ge 5000 ] then echo "i= rstge5000]thenecho"i=i,j= j , s u m 1 = j,sum1= j,sum1=sum1,sum2= s u m 2 , r s t = sum2,rst= sum2,rst=rst"
break 2
fi
done
done

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值