博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【shell】shell基础
阅读量:5237 次
发布时间:2019-06-14

本文共 3540 字,大约阅读时间需要 11 分钟。

一、数据类型

1.shell变量

运行shell时,会同时存在三种变量:

  • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

1.1命名规则  

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

1.2引用变量

  $varible_name

  ${varible_name}

1.3只读变量

  readonly varible_name

1.4删除变量

  unset varible_name

  注意:unset不能删除只读变量

2.shell字符串

2.1单双引号区别

  

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

2.2获取字符串长度

  ${#str_name}

2.3提取字符串

  echo ${str_name:n:m}  从第N个起截取Mge字符(包括空格)

  

2.4查找字符串位置

  str="today is monday"

  echo `expr index "${str}" as char` (起始值为1)

  查找字符 m 或 o 的位置(哪个字母先出现就计算哪个):

  

3.数组

3.1定义数组

  array_name=(value0 value1 value2 ....)

  或array_name[0]=value1

3.2读取数组

  获取特定值:${array_name[n]}

  获取所有数值${array_name[@]}

3.3获取数组长度

  ${#array_name[@]}或${#array_name[*]}

  获取单个元素长度 ${#array_name[n]}

 

4.注释

4.1单行注释 #

4.2多行注释

二、shell传递参数

1.传递参数

1.1传递参数

  脚本中内容如下:

1 #!/bin/bash2 3 echo "Shell 传递参数实例!";4 echo "执行的文件名:$0";5 echo "第一个参数为:$1";6 echo "第二个参数为:$2";7 echo "第三个参数为:$3";

 

  为脚本设置可执行权限并执行脚本,结果如下:

$ chmod +x test.sh $ ./test.sh 1 2 3  #传入了4个参数Shell 传递参数实例!执行的文件名:./test.sh第一个参数为:1第二个参数为:2第三个参数为:3

 

 注意:在linux系统中输入以上命令时提示/bin/sh^M:损坏的解释器: 没有那个文件或目录

 这是由于脚本文件在保存时使用了DOS文件格式造成的,可以用vim打开文件,然后执行下列操作:

:set ff=unix:wq 1.2处理参数的字符

注意:$*与$@的区别:

只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

 

三、shell运算符

1.算数运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用

如:val=`expr 2 + 2`或 $[2+2]

2.关系运算符

  

3.布尔运算符

  

4.逻辑运算符

  

5.字符串运算符

  

a=10b=20if [ $a != $b ]then   echo "$a != $b : a 不等于 b"else   echo "$a != $b: a 等于 b"fi

 

6.文件测试运算符

  

注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2;赋值=左右两端不能有空格

  条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

  乘号(*)前边必须加反斜杠(\)才能实现乘法运算;

四、命令

1.echo

1.1显示普通字符串

1.2显示转义字符串

  echo " \"hello\" "

1.3显示变量

1.4显示换行

  换行: echo -e "today is \n"

      echo “Friday”

  不换:  echo -e "today is \c"

      echo “Friday”

1.5显示重定向

  echo "it is a test">myfile

1.6原样输出

  单引号 echo 'my $name '

1.7显示命令执行结果

  echo `expr date`

2.printf

类似c中printf,详见

3.test

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试

详见

以下程序效果一样

 

五、循环

1. if else

1 if condition1 2 than 3     command1 4 elif condition2 5 than 6  command2 7 else 8 than 9  command 310 fi
View Code

 

 2.for 循环

1 for var in item1 item2 ... itemN2 do3     command14     command25     ...6     commandN7 done
View Code

 

3.while

while conditiondo    commanddone

4.unitil

until conditiondo    commanddone

5.case

1 case 值 in 2 模式1) 3     command1 4     command2 5     commandN 6     ;; 7 *) 8     command1 9     command210     commandN11     ;;12 esac
View Code

 

无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

6.跳出循环(break和continue)

六、shell函数

1.定义函数

[ function ] funname [()] { action; [return int;] }
  • 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
1 funWithReturn(){2     a=13     b=24     echo "两个数字分别为 $a和 $b!"5     return $[a+b]6 }7 funWithReturn8 echo "输入的两个数字之和为 $? !"
View Code

注意:函数返回值在调用该函数后通过 $? 来获得。 

2.函数参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

注意:$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

 七、shell文件包含

. filename   # 注意点号(.)和文件名中间有一空格或 source filename
 
1 #!/bin/bash2 #使用 . 号来引用test1.sh 文件3 . ./test1.sh4 # 或者使用以下包含文件代码5 # source ./test1.sh6 echo "菜鸟教程官网地址:$url"
View Code
 

 

 

 

 

 

转载于:https://www.cnblogs.com/dhs94/p/10819442.html

你可能感兴趣的文章
SpringCloud Config(分布式配置中心)
查看>>
input 输入值的监听 禁止输入特殊字符
查看>>
jQuery生成QRcode二维码
查看>>
网络编程知识点(一)
查看>>
C# 怎么才能取到网卡的型号信息呢? 如: 博通 NetLink BCM57781 Gigabit Ethernet
查看>>
git基础-撤销操作
查看>>
非空即真,非零即真
查看>>
[译] 命名有意义的版本号2.0.0-rc1
查看>>
[BZOJ4361]isn(DP+容斥+树状数组)
查看>>
从错误中学python(4)——最小公约数与辗转相除法
查看>>
Objective-C学习笔记(四)——OC实现最简单的数学运算
查看>>
「五」创建一个带 tomcat 服务的基础镜像(修订版)
查看>>
Android布局
查看>>
Win7下VS2010、IIS7配置常见问题收集
查看>>
C#控制台或应用程序中两个多个Main()方法的设置
查看>>
Spring Resource框架体系介绍
查看>>
JSON对象与字符串的互换——JSON.parse()和JSON.stringify()
查看>>
求N以内与N互质的数的和
查看>>
SICP习题 1.7 (求平方根改进)
查看>>
实验七
查看>>