shell编程基础

任何一门编程语言,都是分为几个部分,把每个部分学习明白了,剩下的就是靠代码量来巩固自己编程能力了。
同其他编程语言一样,shell大体分为几个部分
1、变量
2、逻辑操作
3、循环结构
4、函数
5、正则表达式
本文将简单介绍这五个部分,让你初步学会shell。至于学精shell,就需要自己多写代码,多看代码了。

一、变量
1、字符类型变量的赋值 shell里数值类型变量与字符类型变量同类,只有在使用的时候会加以区分。
变量名=值 注意:等号两边不允许有空格
var1=abc
var2=”abc”
var3=10
变量的使用 美元符加变量名
echo $var1
echo ${var2}
echo ${#var2} 获取变量的长度
2、数组
赋值:
arr_var=(1 2 e d 4 5)

arr_var[0]=1
arr_var[1]=2
arr_var[2]=e
arr_var[3]=d
arr_var[4]=4
arr_var[5]=5
使用:

echo ${arr_var[1]}   获取第二个数组元素      2                  
echo ${arr_var[3]}   获取第四个数组元素      d
echo ${#arr_var[*]}  获取数组元素的个数      6
echo ${arr_var[*]}   以清单的方式打印数组    1 2 e d 4 5

3、日期类型变量
shell里使用 date 命令获取系统时间,date可以使用一些参数来格式化输出
如:

date +%Y%m%d       打印系统当前日期:  20191202
date "+%Y%m%d %H%M%S"       打印系统当前时间:  20191202 142847
date "+%Y-%m-%d %H:%M:%S"   带一些格式符号打印系统当前时间    2019-12-02 14:28:47
使用变量获取时间:
my_date=$(date "+%Y%m%d %H%M%S")          my_date 的结果是  20191202 142847
至此,shell的变量部分完毕。

3、常用字符串操作

${#string}    $string的长度
${string:position}$string中, 从位置$position开始提取子串
${string:position:length}$string中, 从位置$position开始提取长度为$length的子串
${string#substring}   从变量$string的开头, 删除最短匹配$substring的子串
${string##substring}   从变量$string的开头, 删除最长匹配$substring的子串
${string%substring}   从变量$string的结尾, 删除最短匹配$substring的子串
${string%%substring}   从变量$string的结尾, 删除最长匹配$substring的子串
${string/substring/replacement}   使用$replacement, 来代替第一个匹配的$substring
${string//substring/replacement}   使用$replacement, 代替所有匹配的$substring
${string/#substring/replacement}   如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
${string/%substring/replacement}   如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
例:
a=asdfghjkl
echo ${#a}    9
echo ${a:7}   kl
echo ${a:2:7}  dfghjkl
string=abc12342341   
echo ${string#a*3}     //42341  从$string左边开始,去掉最短匹配子串    
echo ${string#c*3}     //abc12342341  这样什么也没有匹配到    
echo ${string#*c1*3}   //42341  从$string左边开始,去掉最短匹配子串    
echo ${string##a*3}    //41     从$string左边开始,去掉最长匹配子串    
echo ${string%3*1}     //abc12342  从$string右边开始,去掉最短匹配子串    
echo ${string%%3*1}    //abc12     从$string右边开始,去掉最长匹配子串   


二、逻辑操作
1、变量运算:

shell里如果想使用变量运算,需使用如下四种方式,否则,就是普通的字符串连接。

num1=10
num2=23
let plus=$num1+$num2
plus=$[ $num1 + $num2 ]
plus=$(( $num1 + $num2 ))
plus=`expr $num1 + $num2`

2、变量的比较
a、数值比较

-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
以上是shell里数值比较运算符,注意是数值比较,shell比较特殊,数值在比较和运算的时候必须使用特定的写法,不然会将数值做字符串处理。在字符串里10大于23,而在数值里10小于23。
b、字符串比较
==  等于 
!=  不等于  
>   大于  
>=  大于等于   
<   小于   
<=  小于等于
字符串比较跟其他编程语言类型,比较直观。

3、条件判断 if
具体用法和注意事项直接看例子
如例: com.sh

num1=10
num2=23
#字符串比较
if [ $num1 > $num2 ];then                                 #if两边的中括号里侧,必须有空格。右边必须有分号,必须有then。(如果把then放在下一行可以没有分号)
  echo "字符串[ $num1 ]比字符串[ $num2 ]大。"
elif [ $num1 < $num2 ];then                               #注意elif的写法 
  echo "字符串[ $num1 ]比字符串[ $num2 ]小。"
else
  echo "字符串[ $num1 ]与字符串[ $num2 ]相等。"
fi                                                        #if语句块结束的时候,必须有一个对应的结束的反if,也就是必须要用 fi 
#数值比较
if [ $num1 -gt $num2 ];then
  echo "数值[ $num1 ]比数值[ $num2 ]大。"
elif [ $num1 -lt $num2 ];then
  echo "数值[ $num1 ]比数值[ $num2 ]小。"
else
  echo "数值[ $num1 ]与数值[ $num2 ]相等。"
fi
执行  sh com.sh 
结果:
字符串[ 10 ]比字符串[ 23 ]大。
数值[ 10 ]比数值[ 23 ]小。

三、循环结构
for while until 三种循环
直接上例题,注意的地方在例题里有注解。

**a、for循环**
for line in a b c  #for循环,变量依次被循环列表赋值,do  done是循环体里的必须元素。
do
  echo $line
done
**b、while循环**
a=3                          # while 当。。。为真时,do something,直到为假结束循环,do done必不可少。
while ((a < 12))
do 
  echo $a
  a=$[$a + 1]
done 
**c、until循环**
a=12                         # until 当。。。为假时,do something,直到为真结束循环,do done必不可少。
until ((a < 8))
do 
  echo $a
  a=$[$a - 1]
done 

四、函数
shell里函数创建方法:
function 函数名(){
函数体
}
或 直接写函数名,省略function关键字
函数名(){
函数体
}
例:

add(){                   #创建函数
  sum=$[$1 + $2]         # $1 $2为函数的第一个参数和第二个参数
  echo $sum
}
add 1 3                  # 调用函数 传参 1 3    结果打印 4
add 2 7                  # 调用函数 传参 2 7    结果打印 9

五、正则表达式
正则表达式就是描述一段文本的匹配规则,这个在很多编程语言里都有应用。

在这里插入图片描述
如下是对正则的一些用法举例:
grep -v -E ‘^$’ test_exp1.dat
#去掉空行
grep -E ‘(xiao){3}’ test_exp1.dat
#找出包含连续三次xiao字符的行
grep -E ‘^I’ test_exp1.dat
#找出以I开头的行
grep -E ‘^’ test_exp1.dat
#找出包含字符^的行
grep -E ‘^^’ test_exp1.dat
#找出以字符^开头的行
grep -E ‘0[0-9]{2}-[0-9]{8}’
#找出匹配010-12345678这样的类似包含区号及电话号的合法电话号码。
正则还有很多功能,这里只列举一些功能来描述正则的用法,他在awk和sed里都有很广泛的应用,在变量匹配的地方也会使用到正则。
希望本文对你学习shell有所帮助。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值