shell编程基础实践——语法篇一

编程入门 行业动态 更新时间:2024-10-19 02:25:36

shell编程基础实践——<a href=https://www.elefans.com/category/jswz/34/1770552.html style=语法篇一"/>

shell编程基础实践——语法篇一

shell基础理论

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

shell脚本

#命令列表中列出的顺序执行#创建->编辑->保存[root@single shell]# vi three.sh[root@single shell]# lsthree.sh#!/bin/bash		命令开头必须要使用:<<!echo -n "hello kb10"echo "hello kb11"!esc :x/w #修改权限ls -la-rw-r--r--. 1 root root   31 Nov 23 09:06 three.shchmod u+x test.sh-rwxr--r--. 1 root root   31 Nov 23 09:06 three.sh#执行./three.sh

shell命令

#echo [-n] "..."	控制台输出#read VAR			控制台输入#命令行输入echo -n "please enter your name => "read NAMEecho "my name is $NAME"#控制台输出[root@single shell]# ./three.shplease enter your name => (王者)手动输入      my name is 王者

shell注释

#单行:#...
#多行::<<!  ... !

shell变量

#变量:数字、字母、下划线、一般字母大写#值可以是一个数字、文本、文件名、设备或任何其他类型的数据,不可以是指针#shell可以创建,分配和删除变量#创建NAME="henry"AGE=18#使用echo "$NAME,$AGE"#命令NAME="henry"AGE=18echo "$NAME,$AGE"#控制台[root@single shell]# ./three.shhenry,18#取消/删除unset NAME#命令NAME[0]="zs"NAME[1]="ls"unset NAME#控制台[root@single shell]# ./three.sh[root@single shell]# 

常量

readonly FINAL="1001"

#变量分类

#局部变量:当前实例有效
#环境变量:跨实厉访问
#当前登录有效的临时环境变量export VARexport -f  代表[变量名称]中为函数名称export -p		#列出所有的shell赋予程序的环境变量export -n 		#删除环境变量VAR变量实际上并未删除,只是不会输出到后续指令的执行环境中。export VAR		#添加环境变量VAR

shell变量命令符:

		$$		当前shell进程编号$0		当前脚本的文件名$n		脚本参数		如:./one.sh henry 18,则脚本中的$1为henry$#		脚本参数得到数量	如上:2$*		脚本参数的完整集合	如上:henry,18$@		脚本参数的独立集合	如上:henry,18# $* vs $@# 不加""两者相同#加上""则$*代表整体,而$@代表个体$?		上一条命令的执行结果状态值或函数的返回值;0表示正常,1表示失败1$!		The process number of the last background command.

shell数组

#标准变量:保持一个类型一值的变量#数组:支持不同类型的变量,可以在同一时间容纳多个值#创建赋值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[0]}	#数组长度#命令行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[0]}#控制台[root@single shell]# ./three.shhenryhenrypolaarielhenry pola arielhenry pola arielhenry

shell运算符

#算术运算符#shell早期未设计算术,但可以在外部程序awk或expr#expr expr与运算符和其他值之间【必须有空格】,所有的算术计算,使用整数#*需要转译 、*#不支持小数计算VAL=`expr 2 + 2`let "VAL=2**3"VAL=$((2+3))echo $VAL#+ - * / % = ++ --[ 2 == 2 ]	#=>true[ 2 != 2 ]	#=>falsevar=`expr 2 + 3`#命令行输入echo $varvar=`expr 2 - 3`echo $varvar=`expr 2 \* 3`echo $varvar=`expr 2 / 3`echo $varvar=`expr 2 % 3`echo $var#控制台输出[root@single shell]# ./three.sh5-1602

#关系运算符

# -eq -ne -lt -le -gt -ge

#布尔运算符

# ! -o -a[ 2 -lt 3 -o 5 -gt 3]
# || &&[[ 2 < 3 || 5 > 3 ]]

#字符串运算符

#二元:== != =~
#命令行输入if [ $1 == "henry" ]thenecho "is henry"elseecho "is not henry"fiif [[ $1 =~ ^[0-9]+$ ]]thenecho "is henry"elseecho "is not henry"fi[[ $var =~ PATTERN ]]不加\"

#正则匹配

^		开始
$		结束
.		一个任意字符
[]		指定范围	[abc][0-9][^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) -o 是否文件所有者
#命令行输入
if [ -r $1 ]
thenecho "radeable"
elseecho "unreadable"
fi

#特殊表达式

``<=>$()			#命令替换符,兼容性``更好OUTPUT=`start-all.sh`
先执行start命令,执行完把结果赋值给OUTPUT,默认有线程等待,延时加载
...(())				#算术运算加强版
# && ||
# ++ -- **$(()) <=> $[]		#算术运算,$(())中变量可以加$也可以不加[]					#test命令
[[]]				#字符串计算加强版${}${STR#*WORD}			#若STR符合WORD,将最短(WORD和左侧)的删除<=>${STR%WORD}(WORD和右侧)
#命令行输入VAR="/opt/software/hadoop/a.txt"VAR=${VAR%/*}echo $VAR
#控制台输出[root@single shell]# ./three.sh/opt/software/hadoop${STR##*WORD}			#若STR符合WORD,将最长(WORD和左侧)的删除<=> ${STR%WORD}(WORD和右侧)
#命令行输入VAR="/opt/software/hadoop/a.txt"VAR=${VAR##*/}echo $VAR
#控制台输出a.txt${STR/WORD/REPLACE}		#若STR符合WORD,将第一个匹配项替换为REPLACE#命令行输入VAR="/opt/software/opt/a.txt"VAR=${VAR/opt/123}echo $VARopt#控制台输出[root@single shell]# ./three.sh/123/software/opt/a.txt${STR//WORD/REPLACE}#若STR符合WORD,将所有匹配项替换为REPLACE#命令行输入VAR="/opt/software/opt/a.txt"VAR=${VAR//opt/123}echo $VAR#控制台输出[root@single shell]# ./three.sh/123/software/123/a.txt${STR:-DE_VALUE}		#若STR未赋值或为空置,则设定STR值为DF_VALUE#命令行输入STR=(12)echo ${STR:-DE_VALUE}#控制台输出[root@single shell]# ./three.sh12${ARRAY[IX]}			#获取数组ARRAY下标IX的元素#命令行输入ARR=(henry 12 wsdf 严旭) echo ${ARR[2]}#控制台输出[root@single shell]# ./three.shwsdf${#ARRAY[@]}			#获取数组ARRAY的长度(ITEM1 ITEM2...)#命令行输入ARR=(henry 12 wsdf 严旭) echo ${#ARR[@]}#控制台输出[root@single shell]# ./three.sh4${ARRAY[*]}				#整个数组#命令行输入ARR=(henry 12 wsdf 严旭) echo ${ARR[*]}#控制台输出[root@single shell]# ./three.shhenry 12 wsdf 严旭

更多推荐

shell编程基础实践——语法篇一

本文发布于:2024-02-25 14:15:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1699243.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语法   基础   shell

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!