Linux shell 脚本基础

shell下多行注释 :<<! !

:<<!  begin
多行注释
第二行
!

ed的使用

#删除5-10行以及16-20行。
#!/bin/bash
ed $1<<EOF
16, 20d
5,10d
w
q
EOF

在这里插入图片描述

\ls         				#可以忽略alias的指定参数
dos2unix     文件格式转化
read -s   					#不显示读取

select 变量 in 关键字集
do
	交互式执行
done

shift 参数左移 $# -1      以供参数大于9个的处理 
sh -x 显示过程
-n 查询语法错误
-v 执行前会先输出脚本本身内容 
sh 脚本     要求对所在目录有rx 对脚本有r(绝对路径运行要有rx权限)
export PS4='+${LINEN0}'      可以shell -x 的跟踪过程中显示行号
截取一段调试,在脚本中写如下
set -x   此处开启调试 
set +x   关闭调试
直接运行就要可以

变量以字母和下划线开头

${#array[@]}   变量字符串长度
unset array 删除整个数组 
unset array[4]  删除单个数组元素
数组的定义 
array=(25 80 100 90)
array=([1]=one [2]=two [3]=three)
array[0]=a array[1]=two array[1]=three 
declare -a array   
array=($(ls)) 
echo ${array[0]}
echo ${array[@]}   输出全部
echo ${#array[@]}  输出数组元素个数    或者 ${#array[*]}
echo ${#array[@]:3:5}       第三个开始提取5个
echo ${#array[@]/5/6}       第五个改写成6   临时生效,实际数组不变

echo ${line:0:1} 	字符串截取,从字符串line中截取从第0个到第1个字符

形式如果设置了 var如果没有设置var
${var:-string}$varstring
$ {var:+string}stringnull
${var:=string}$varstring(并且执行var=string)
${var:?string}$var(返回string然后退出)

在此,冒号“:”在所有运算表达式中事实上均是可选的。

  • 有":" === 运算表达式测试“存在”和“非空”
  • 没有":" === 运算表达式仅测试“存在”
[tom@ton ~]$str='25 80 100 90'
[tom@ton ~]$echo $str
25 80 100 90
[tom@ton ~]$echo ${str#* }
80 100 90
[tom@ton ~]$echo ${str##* }
90
[tom@ton ~]$echo ${str% *}
25 80 100
[tom@ton ~]$echo ${str%% *}
25

调试脚本

#!/bin/bash -r  受限模式
set -r 写在脚本中也是受限模式

写循环时可以写sleep以免占用过多系统资源 
 
 set -x 
 
 需要调度代码 
 
 set +x 
 
 dirnamebasename 配合处理路径
 
 脚本结尾要unset 变量
 
 reset  变量重新初始化
 unset 函数名 取消加载的函数

脚本函数 
$0 仍然父脚本名称 
return 是退出函数

函数传参是从$1开始的
declare 声明变量
-       给变量设定类型属性
+       取消类型属性
-i      int型
-x      环境变量
-p      显示变量声明类型
 # 执行$()   命令相于当开启子shell运行()中的内容

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.8.0_251/bin:/root/bin
路径讲究先后顺序的 
export PATH=$PATH:/tmp 将tmp目录加入path
想要先访问tmp,此时可以
export PATH=/tmp:$PATH
-d file						#file存在且是一个目录则返回True.
-f file						#如果file存在且是一个普通文件则返回True.
-w file						#如果file存在且可写则返回True.
-x file						#如果file存在且可执行则返回True.
filel -nt file2				#如果filel比file2新则返回True。(指修改日期)
filel -ot file2 			#如果file1比file2旧则返回True。(指修改日期)
filel -ef file2				#如果两者是相同的设备和具有相同的结点(inode)数则返回True.

-z str						#如果str长度为零则返回True。
-n str 						#如果str长度为非零则返回True.
str1 ===== str2				#如果字符串相等则返回True。
str1 === str2				#如果字符串相等则返回True。
(使用"=="代替"="符合严格意义上的 POSIX兼容)
str1 !== str2				#如果字符串不相等则返回True.
str1 < str2 				#如果str1排在str2之前则返回True (与当前位置有关)。
strl > str2 				#如果str1 排在str2之后则返回True(与当前位置有关)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值