shell脚本编程入门

shell脚本

简单来说就是将所有命令行封装进一个文件中,在赋予该文件可执行权限后,./文件.sh 即可执行该文件中得命令,而不需要将所有命令打出

shell脚本得基本格式

#!/bin/sh
注释 头文件得意思是以什么方式运行,sh即为直接运行解释器,可以换为php等
脚本内容

shell变量

shell中得变量格式 var=数据 注:一定不要多加空格在变量名称附近,否则识别var就不是脚本中得变量了,变量名称得规范只能有英文字母,下划线以及数字,且不能以数字开头
输出 与java中sout类似得关键字为echo 例:echo “123” 如果输出定义得变量时,需要如下格式 :

var=123 
echo ${var}

截取字符串

string="superman is handsome"
echo ${string:1:4} # 输出 uper

数组得定义

arr=(数据,其中数据间以,分割)
输出数组:echo ${arr[n]}或者echo ${arr[*]或者echo ${arr[@]}
获取数组得长度:echo KaTeX parse error: Expected '}', got '#' at position 2: {#̲arr[n]}其他写法类似 数…{arr[index]},index即为索引的位置

shell中得注释:

shell中得参数传递

获取输入得参数格式为:$n,n代表执行脚本得第几个参数,$0代表执行得文件名 KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ 代表参数得个数,* 代表传递得参数

shell中得运算符

原生得bash不支持数学运算,需要通过awk或者expr来实现, expr举例:var=1 + 1 echo v a r 其 中 ‘ 不 是 ′ 区 分 开 算 数 运 算 符 : 条 件 表 达 式 要 放 在 方 括 号 之 间 , 并 且 要 有 空 格 , 例 如 : [ var 其中`不是'区分开 算数运算符:条件表达式要放在方括号之间,并且要有空格,例如: [ var:[a==$b] 是错误的,必须写成 [ $a == $b
] 其中得*前面必须加\才能实现运算 a=1 b=2 关系运算符:

操作符说明举例
-eq等于[ $a -eq $b ] false
-gt小于[ $a -gt $b ] false
-lt等于[[ $a -lt $b ] true
-ge大于等于[ $a -ge $b ] false
-le小于等于[ $a -le $b ] true

布尔运算符:

操作符说明举例
-a[ $a < $b -a $a == $b ] false
-o[ $a < $b -0 $a == $b ] true
![[ $a != $b ] true

逻辑运算符:&& || 逻辑与逻辑或 字符串运算符: str1=“123” str2=“123”

操作符说明举例
=等于返回true[ $str1 = $str2 ] true
!=不等于返回true[ $str1 = $str2 ] false
-z字符串长度为0返回true[ -z $str1 ] false
-n字符串长度不为0返回true[ -n “$str2” ] true
$字符串不为空:true[ $str2 ] true

文件测试运算符 fileName="/usr/local/test"

操作符说明举例
-d该文件是目录返回true[ -d $fileName ]
-f文件为普通类型文件返回true[ -f $fileName ]
-r文件可读返回true[ -r $fileName ]
-w文件可写返回true[ -w $fileName ]
-x文件可执行返回true[ -x $fileName ]
-s文件不为空返回true[ -s $fileName ]
-e文件包括目录存在返回true[ -e $fileName ]

shell中得test命令 与 file中判断以及字符串判断与上述类似

shell中的条件判断 if格式如下

a=1
b=2
if [ $a > $b ]
then 
echo "a大于b"
elif[ $a == $b ]
then
echo "a和b相等"
else
then
echo "a小于b"
fi

for循环 格式如下

arr=(1,2,3,4,4)
for v in arr
do
echo $v
done

while循环

a=3
while [ $a != 0 ]
do
        echo $a
        let "a--"
done

无限循环

1、for(( ; ))
2、while true
do
command 
done 
3、while :
do 
command
done

until循环,将条件循环到为true时结束

a=3
until [ $a == 0 ]
do
        echo $a
        let "a--"
done  

case 类似java中得switch

   echo "输入学生成绩:"
   read num #读取数字
   grade=`expr $num / 10`
   case $grade in 
           10) echo "满分"
                   ;;
           9) echo "best"
                   ;;
          8) echo "great"
                  ;;
          7) echo "better"
                  ;;
          6) echo "good"
                  ;;
          *) echo "you are a bad guy"
  esac

正则表达式

匹配符说明举例
^匹配行首grep ^ [a] t.sh匹配以a开头行
$匹配行尾[grep [末尾]$ t.sh
*模糊匹配grep a* t.sh
[]匹配[]内得字符grep [b=] t.sh
\转义字符grep [ ^0-9$ ] t.sh匹配0-9和美元符号
.[ -s $fileName ]
-e匹配任意单字符grep [ ^.*$ ] t.sh
pattern{n}匹配模式中出现n次
pattern{n,}匹配模式中最少出现n次
[[:upper:]][A-Z]
[[:lower:]][a-z]
[[:digit:]][0-9]
[[:alnum:]][0-9a-zA-Z]
[[:space:]]空格或者tab
pattern{n,m}匹配模式中最少出现n-m次
[[:alpha:]][a-zA-Z]
[Ss]igna[lL] 匹配单词signal、signaL、Signal、SignaL
^d..x..x..x 用户、用户组及其他用户组成员有可执行权限的目录 
^[^l]  排除关联目录的目录列表 
[^$] 匹配空行 
[^.*$] 匹配行中任意字符串  
^.$ 匹配仅有一个字符的行 
[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\} 匹配日期格式dd-mm-yyyy  
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} 匹配IP地址格式nnn.nnn.nnn.nnn  

grep过滤

匹配符说明举例
-c输出匹配行得计数
-i忽略大小写
-h不显示文件名
-I查询多文件时只输出包含匹配字符得文件名
-n显示匹配行及行号
-v显示不好含匹配文本得所有行
 extended grep egrep

awk文本分析工具 awk操作符

操作符说明举例
= += *= /= %= ^=赋值运算符
&& !并 与 非
~ !~匹配 不匹配
< <= == != >= >关系运算符
±*/%^算数运算符

字符串操作函数

操作符说明举例
= += *= /= %= ^=gsub(r,s)在整个$0中用s替代rcat t.sh | awk 'gsub("123","abc") {print $0}'
gsub(r,s,t)返回s中字符串t的第一位置
index(s,t)匹配 不匹配
length(s)测试s是否包含匹配r的字符串
split(s,a,fs)在fs上将s分成序列a
sprint(fmt,exp)返回经fmt格式化后的exp
sub(r,s)用$0中最左边最长的子串代替s
substr(s,p)返回字符串s中从p开始的后缀部分
substr(s,p,n)返回字符串s中从p开始长度为n的后缀部分

Sed

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序

操作符说明举例
-n在整个$0中用s替代rsed特殊处理得行特别显示
-e多项编辑
-f将sed动作写在一个文件内

sed编辑命令

操作符说明举例
p打印当前行
=显示文件行号
a\在定位行号后附加新文本信息
i\在定位行号前插入文本信息
d输出定位行号
c用新文本替换定位文本
r从另一个文件中读取文本
w写文件到一个文件
q第一个模式匹配后推出或者立即推出
l显示与八进制ASCII代码等价得控制字符

sort命令排序

操作符说明举例
-c测试文件是否已经分类
-m合并俩个分类文件
-u删除所有复制行
-o存储sort结果得输出文件名
-b使用域进行分类,忽略第一个空格
-n指定分类是域上得分类
-t域分隔符非空格键和tab分割域
-k指定列数

cut截取

操作符说明举例
-c list指定剪切字符数
-f field指定剪切域数
-d指定域空格和tab键不同的域分割符
-b与-c类似
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值