linux的 shell编程


Shell 是一个用C 语言编写的程序,通过Shell用户可以访问操作系统内核服务。它类似于DOS 下的 command 和后来的 cmd.exe 。Shell即是一种命令语言,又是一种程序设计语言。
linux 的Shell 种类众多,可以通过 cat ./etc shells 查看系统中安装的shell。
Bash 由于易用和免费,在日常工作中被广泛使用,同时,Bash也是大多数linux 系统默认的Shell

基本格式

shell脚本第一行 #! 是一个约定的标记,他告诉系统这个脚本要使用什么解释器来执行。

#!/bin/sh 

一个简单的例子 vim hello.sh

#! /bin/sh

# 我是注释
echo "hello"

运行的两种方式

  • 第一种方式: sh hello.sh 或者 bash hello.sh
  • 第二种方式:添加执行权限
    chomd -R 777 hello.sh

shell变量

定义

语法格式: 变量=值。
注意:变量名和等号之间不能有空格,同时遵循以下规则:

  • 首字符必须为字母
  • 中间不能有空格,可以使用下划线
  • 不能使用标点
  • 不能使用bash里的关键字
    例:
your_name=hello

使用

使用一个定义过的变量,只要在变量名前加$ 即可。
例如:

echo $your_name

类型

  • 局部变量
    局部变量在脚本或命令中定义,仅在当前shell实例中有效
  • 环境变量
    所有的shell窗口全部共享
  • shell变量
    只在当前脚本有效,其他脚本无效

参数传递

位置参量 :位置参量是一种特殊的内置变量,通常被shell脚本用来从命令行接收参数,或被函数用来保存传递给他的参数。

符号说明
$0当前脚本的文件名
$1-s9第一到第九个位置参量
${10}第10个位置参量,以此类推还有${11}…
$#位置参量的个数
$*一单字符串显示所有位置参量
$@未加双引号与$*相同
$$脚本运行的当前进程号
$!最后一个后台运行的进程的进程号
$?显示前面最后一个命令的推出状态,0代表没有错误,其他值代表有错误

实例:

#! /bin/sh

# 我是注释
echo "hello"
echo "当前脚本的名称"$0
echo "第一个参数"$1
echo "第二个参数"$2

运行时输入参数

sh hello.sh ab ac

运算

原生bash不支持简单运算,但是可以使用其他命令来实现,例如expr。
注意:表达式和运算符之间要有空格

#! /bin/sh

a=4
b=20
# 加法运算
echo `expr $a + $b`
# 减法运算
echo `expr $a - $b`
#乘法运算 注意*号前面要加反斜杠
echo `expr $a \* $b`
# 除法运算
echo `expr $a / $b`

还可以使用(())、$[]进行算术运算

判断语句

  • 关于某个档名文件类型的判断:如 test -e filename

      	* -e  该档名是否在用
      	* -f  该档名是否存在且为档案(file)
      	* -d  该文件名是否存在且为目录(directory)
    
  • 关于档案权限侦测:如 test -r filename

      	* -f   侦测档名是否存在且具有可读权限
      	* -w   侦测档名是否存在且具有可写权限
      	* -x   侦测档名是否存在且具有可执行权限
    
  • 关于两个整数之间的判断:

      	* -eq   两数值相等equal
      	* -ne   两数值不等not equal
      	* -gt   大于 greater than
      	* -lt   小于 less than
      	* -ge   大于等于 greater than or equal
      	* -le   小于等于 less than or equal	 			
    
  • 判定字符串的数据

      	* test -z string   判定字符串是否为0,若为0,结果为true
      	* test -n string   判断字符串是否非0,非0,结果为true
      	* test str1=str2   判断字符串是否相等,相等为true
      	* test str1!=str2  判断字符串是否相等,不相等为true
    

if 判断

语法:

if [判断语句];then
	执行命令
fi

多重条件

if [判断语句];then
	执行命令
else
	执行命令
fi

更复杂的情况

if [判断语句];then
	执行命令
elif [判断语句]; then
	执行命令
else
	执行命令
fi

for循环

实例:

for var in 1 2 3 4 5
do
	echo ${var}
done

num=10
s=0
for((i=0;i<${num;i=i+1}))
do
	s=$((${s}+${i}))
done
echo ${s}

while循环

语法

while [condition]
do
	执行命令
done


until [condition]
do
	执行命令
done

实例:从文件中逐行读取数据

#!/bin/bush

SLAVE_FILE=/opt/app/hadoop-2.5.0/etc/hadoop/slaves

cat ${SLAVE_FILE} | while read line
do
	echo ${line}
done

case语法

#! /bin/sh
echo '输入1到4之间的数字'
echo '你输入的数字是'
read aNum
case $aNum in
	1) echo '你选择了 1'
	;;
	2) echo '你选择了 2'
	;;
	3) echo '你选择了 3'
	;;
	4) echo '你选择了 4'
	;;
	*) echo '你没有输入 1到4 之间的数字'
	;;
esac

函数

函数在使用前需要定义,调用函数使用其函数名即可。

[ function ]  funname [ () ]
{
action;
[ return int; ]
}

函数参数

通过为止参数传参
实例

#! /bin/bash
hello(){
echo "第一个参数为"$1
echo "第二个参数为"$2
}
hello abc 123
或 在命令行传参
hello $! $2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值