shell编程应用

文章目录

  • 1 shell编程
      • 1.1shell编程是什么?
        • 1.2 shell解释器
        • 1.3 编写脚本
        • 1.4 shell变量
        • 1.5 使用变量
        • 1.6 删除变量
        • 1.7 只读变量
        • 1.8 字符串
        • 1.9 shell 运算符
        • 2.0 流程控制
          • 2.0.1 if else
          • 2.0.2 if else
          • 2.0.3 if else-if else
          • 2.0.4 常用的运算符
          • 2.0.5 for循环
          • 2.0.6 while 语句
          • 2.0.7 case(switch)
          • 2.0.8 跳出循环

1 shell编程

1.1shell编程是什么?

Shell是一个命令解释器,它的作用是节省5执行用户输入的命令及程序等,用户输入一
条命令,shell就解释执行一条。这种从键盘一输入命令,就可以立即得到回应的对话方式,
被称为交互的方式。
Shell存在于操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,
并处理各种各样的操作系统的输出结果,输出到屏幕返回给用户,当我们输入系统用户名
和密码,登录到linux后的所有操作都是由Shell解释并执行的。

1.2 shell解释器

java 需要 虚拟机解释器, 同理 shell脚本也需要 解析器

[root@node04 shells]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

Shell常见种类
Bsh:由贝尔实验室编写。Bsh是产生较早的UNIX Shell程序,实现了最基本的命令解释器的功能,同时也可以作为脚本编程语言
Csh:是因使用C语言的语法风格而得名,在用户的命令行交互界面上进行了很多改进,并增加了历史,别名,文件名替换,作业掏等功能,相比Bsh,Csh在更加适用为  用户提供命令交互操作
Ksh:在Bsh和Csh之后出现的,结合了两都的功能优势,兼具Bsh的语法和Csh的交互特性.
Bash:从名称可以看出是Bsh的升级版本,是著名的开源软件项目,目前大多数的Linux版本(包括Red Hat公司的Linux系统)都使用Bash 作为默认的Shell程序当运行    Shell程序时,实际运行的是Bash程序
Zsh:更多地基于交互式操作考虑进行设计的Shell程序,集成了Bash,Ksh等多种Shell程序的优点

1.3 编写脚本

新建一个 /opt/a.sh文件

     #!/bin/bash
     echo 'hello world'
	 #!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
     echo 命令用于向窗口输出文本。

执行shell脚本

  [root@node04 shells]# /bin/sh 01.sh
  输出 hello world
  有多种执行shell的方式 如 ./  sh  bash csh  等等

1.4 shell变量

 在shell脚本中, 定义变量时,变量名不加美元符号($),如: your_name="runoob.com"
 注意 : 变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样

变量的规则

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

有效变量名
RUNOOB
LD_LIBRARY_PATH
_var
var2
无效变量名
?var=123
user*name=runoob

1.5 使用变量

想要使用变量只需加个$符就行了
your_name=“zhangsan”
echo $your_name
如果想在变量后追加字符的话就加个{}
echo ${your_name} abc
如果不加{}解释器就会把 $your_nameabc当成一个变量(其值为空)

1.6 删除变量

unset 变量名 

unser可以使我们删除一下不要的变量

1.7 只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

 #!/bin/bash
 myUrl="http://www.google.com"
 readonly myUrl
 myUrl="http://www.runoob.com"

运行结果是
/bin/sh: NAME: This variable is read only.
提示你只能读不能修改

1.8 字符串

单引号

skill='java'
str='I am goot at $skill'
echo $str
输出结果是  I am goot at $skill

因为在单引号中的任何字符都会原样输出 单引号中变量是无效的
双引号```

skill='java'
str="I am goot at $skill"
echo $str
输出结果为:
I am goot at java

双引号里可以有变量,双引号中可以出现字符

获取字符串的长度

skill='java'
echo ${skill}    # 输出结果: java
echo ${#skill}   # 输出结果: 4
在变量名前面加个#就可以获取变量中字符的长度

提取子字符串

str="I am goot at $skill"
echo ${str:2} 	  # 输出结果为: am goot at java
echo ${str:2:2}    # 输出结果为: am
str :n :m  从第n个字符取出m个字符

查找字符串

如:计算am在哪个位置
str="I am goot at  $skill"
echo `expr index "$str" am`    # 输出是: 3

1.9 shell 运算符

Shell 和其他编程一样,支持包括:算术、关系、布尔、字符串等运算符

例如,两个数相加:
val=`expr 2 + 2` 
echo $val

注意
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2

运输符 说明 举例
+ 加法 expr $a + $b 结果为 30
- 减法 expr $a - $b 结果为 -10
* 乘法 expr $a \* $b 结果为 200
/ 除法 expr $b / $a 结果为 2
% 取余 expr $b % $a 结果为 0
= 赋值 a=$b 将把变量 b 的值赋给 a
== 等于 [ $a == $b ] 返回 false
!= 不等于 [ $a != $b ] 返回 true

注意:条件表达式要放在方括号之间,并且要有空格.

2.0 流程控制

2.0.1 if else

if 语句语法格式:

if condition; then
command1 
command2
...
commandN 
fi
2.0.2 if else

if else 语法格式:

if condition; then
command1
command2
...
commandN
else
command
fi
2.0.3 if else-if else

if else-if else 语法格式:

if condition1; then
command1
elif condition2; then 
command2
else
commandN
fi
2.0.4 常用的运算符
运算符 说明
-eq 检测两个数是否相等,相等返回 true。
-ne 检测两个数是否不相等,不相等返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。
2.0.5 for循环

for循环格式

  for variable in (list); 
  do 
	 command
	 command
	   ...
   done
2.0.6 while 语句

while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:

	while condition; do
		command
	done
2.0.7 case(switch)

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下

	case 值 in

模式1)
	command1
	command2
	...
	commandN
	;;
模式2)
    command1
	command2
	...
	commandN
	;;
esac
2.0.8 跳出循环

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。

	break命令允许跳出所有循环(终止执行后面的所有循环)。
	continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环

你可能感兴趣的:(Liunx)