当前位置: 首页 > Linux

简单shell脚本入门(纯示例代码)

时间:2023-04-06 22:09:40 Linux

我经常遇到需要简单编写shell脚本的情况。每次忘记shell脚本的语法就去查资料。因此,我专门写一篇文章,记录下常用的shell语法。如何运行shell脚本[root@hostshell]#vimstart[root@hostshell]#catstart#!/bin/bashecho'hello'[root@hostshell]#chmod755start[root@hostshell]#./starthellodatatypestringa=1a=1+1#thisIsthestring'1+1'integera=$((1+1))array#初始化a[2]=100a=(24'str'4)a=([0]=2[2]='str'[4]=20)#单次赋值a[2]='s'#打印整个数组echo${a[@]}#遍历${a[@]}中i的数组;doecho$idone#数组元素个数echo${#a[@]}#指定添加元素的下标a=([0]=2[2]='str')a[3]=1a[6]=6#删除整个数组unseta#删除数组中的单个元素unseta[1]variable#声明一个字符串变量title='hello'num=1#这也是一个字符串#声明一个整型变量num=$((1))注意:等号=不能左右带空格expression#$(expression)a=$(date)a=$(ls~)echo${a}控制流程ifa=5if[$a=5];然后echo'a=5'elseecho'a!=5'fiwhilecount=1while((count<5));doecho$countcount=$((count+1))doneecho'finish'foriin{a..d};做echo$idone#outputabcdfor((i=0;i<5;i++));doecho$idone#output01234switchcasecase语句比较复杂,语法是casewordin[pattern[|模式]...)命令;;]...esac示例:a=1case$ain0)echo'1';;1)回声'2';;*)echo'*';;esac#case倒序#2控制流中常用表达式的逻辑真假判断表达式中,可以换成其他表达式,比如下面的判断文件表达式的常用表达式[-efile]#文件存在[-dfile]#文件是一个目录[-ffile]#文件存在并且是一个普通文件[-rfile]#文件存在并且是可读的[-wfile]#文件存在并且是一个普通文件是可写的[-xfile]#文件存在并且是可执行的=string2]#string1和string2相同[string1!=string2][string1>string2]#string1排在string2之后,比较字符编码大小[string1测试下整数表达式必须用引号括起来[int1-eqint2]#int1等于int2[int1-neint2]#int1不等于int2[int1-leint2]#int1小于或等于int2[int1-ltint2]#int1小于int2[int1-geint2]#int1大于或等于int2[int1-gtint2]#int1大于int2注意:整数表达式更喜欢另一个复合符号:(())复合符号[[]]这个复合符号具有[]的能力,具有正则表达式的能力#例1a='a'if[[$a=~.]];然后echo'a'fi#示例2a=123if[[$a=~^[0-9]+?]];thenecho'a'fi(())这个复合符号主要用于更直观的运算integera=123if(($a>100));thenecho'a'fi多个表达式可以有逻辑运算符[[expression1&&expression2]]#表达式之间的AND运算,短路运算符[[expression1||expression2]]#或表达式之间的操作,短路运算符[[!expression]]functionwithoutparameterfunctionname(){echo'name'}name#callfunctionwithparametersay(){echo$1echo$2}sayhelolois类似于在命令行上传递的值。命令行输入命令行参数echo$1echo$2#其中$1为字符串hello,$2为字符串world./shellhelloworld参考TLCL:http://billie66.github.io/TLCL/book/index.html下一篇博客会列出我在学习shell脚本时的一些疑惑和解答。(如有错误或不同意见,欢迎指出,共同进步!)