shell编程应用

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命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值