【Linux - shell编程】

shell 编程


shell 基础

1 shell 是什么?

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。


2 shell 脚本的执行方式

2.1 第一个shell脚本

shell脚本在控制台上输出hello world:

1、创建文件test.sh(注:shell脚本的扩展名并不影响脚本执行);
2、在文件中输入内容:

#!/bin/bash 		    #告诉系统这个脚本用什么解释器执行
echo "hello world"  #echo 命令用于想窗口输出文本

shell脚本运行方法:

1、设置为可执行程序:

chmod +x ./test.sh	#给予可执行权限
./test.sh			#执行脚本

2、作为解释器参数执行:

/bin/sh test.sh
sh      test.sh
#若使用第二种方法可以不在脚本第一行加入#!/bin/bash

2.2 shell 变量

shell 变量介绍:

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

自定义变量
#!/bin/bash
myName="haitun"		#自定义变量myName
echo myName=$myName	#使用"$"符号调用变量
unset myName		#使用unset删除变量
echo myName=$myName
#多行注释的方法:
:<<!
输出结果:
myName=haitun
myName=
!
只读变量

1、使用readonly命令可以设置只读变量,只读变量的值不能修改;
2、不能使用unset删除只读变量;

#!/bin/bash
myName="haitun"		
readonly myName		#只读变量的值不能被修改
echo myName=$myName
命令的返回值赋给变量
#!/bin/bash
RESULT=`ls -l ./`	#1、使用 ` ` 将命令扩起来进行赋值
echo $RESULT
echo " "
MY_DATE=$(date)		#2、使用 $() 小括号括起来进行赋值
echo date=$MY_DATE
设置环境变量

环境变量: 系统中所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

设置环境变量:
1、export 变量名=变量值 (将shell变量输出为环境变量);
2、source 配置文件 (让修改后的配置信息立即生效);
3、echo $变量名 (查询环境变量);

#新建文件test.sh进行操作
#!/bin/pbash
export AA="haitun"	#设置环境变量"AA"的值为"haitun";
echo AA				#输出环境变量

#然后保存退出test.sh
#然后在命令行中输入 : source test.sh
#然后AA就设置为了环境变量,此时可以直接在命令行中输入 : echo $AA ,可以得到输出结果为:"haitun"
shell 传递参数

可以在执行脚本时向脚本内传递参数;

$ ./test2.sh
 
#!/bin/bash
echo "shell 传递参数"
echo "执行的文件名:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
echo "第三个参数为:$3"

$ chmod +x test2.sh
$ ./test2.sh
$  ./test2.sh 11 22 33
:<<! 
#输出结果:
shell 传递参数
执行的文件名:./test2.sh
第一个参数为:11
第二个参数为:22
第三个参数为:33
!
参数说明
$nn代表一个数字,$0为执行的文件名(包括文件路径),$1表示执行脚本的第一个参数,$2表示执行脚本的第二个参数;
$#传递到脚本的参数个数
$*以一个字符串显示所有向脚本传递的参数;如果是 “ [$*] ”的情况,则为"$1 $2 … $n"的形式输出所有参数。
$@ ∗ 相同,但是使用时加引号,并在引号中返回每个参数。如 " [ *相同,但是使用时加引号,并在引号中返回每个参数。如" [ 相同,但是使用时加引号,并在引号中返回每个参数。如"[@]“用「”」的情况,则为以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号

|$?|显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。|

#!/bin/bash
echo "传递到脚本的参数个数为:$#"
echo "\$*输出:"
for i in "$*"; do
        echo $i
done
echo "\$@输出:"
for i in "$@"; do
        echo $i
done

$ ./myAdd.sh 1 2 4
:<<!
传递到脚本的参数个数为:3
$*输出:
1 2 4
$@输出:
1
2
4
!

3 shell 运算符

基本语法:
1、“$((运算式))” 或 “$[运算式]”;
2、expr x + y ;

#!/bin/bash
A=$1
B=$2
echo "A+B=$(($A+$B))"
echo "A-B=$[$A-$B]"
echo "A*B=`expr $A \* $B`" #使用expr时要用``把表达式引起来,并且对于“乘法运算符”要使用转义字符\

$./test.sh 4 2
A+B=6
A-B=2
A*B=8

4 条件判断

基本语法: 使用时用将表达式放入 [] 内,例如[ a -lt b ],如果表达式为真则返回true否则返回false
判断语句:
1 两个整数比较

字符串判断语句说明
=字符串比较
-lt小于
-le小于等于
-gt大于
-ge大于等于
-ne不等于

2 判断文件权限

文件权限判断语句说明
-r有读的权限
-w有写的权限
-x有执行的权限

3 文件类型判断

文件类型判断语句说明
-f文件存在且是一个常规的文件
-e文件存在
-d文件是一个目录
	#!/bin/bash
echo "条件判断语句:"
a=11
b=12
if [ $a -lt $b ]
then
        echo "a<b"
else
        echo "a>b"
fi

5 流程控制

if判断

#方法 1:
if [ 条件判断式 ]
then
	运行程序
else
	运行程序
fi

case语句

#!/bin/bash
echo "case语句,当命令参数为1时,输出“周一”,参数为2时,输出“周二”,其他情况输出other"
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac

for 循环

#!/bin/bash
#for循环打印所有输入参数
for i in $*
do
        echo $i
done

#for循环累加1~10
SUN=0
for ((i=1;i<=10;i++))
do
        SUM=$[$SUM+$i]
done
echo $SUM
~           

while 循环

#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+1]
done
echo $SUM

6 read读取控制台输入

语法:read (选项) (参数)
选项:
-p:指定读取值时的提示符;
-t:读取值时的等待时间
**参数:**指定读取值的变量名;

#!/bin/bash
#在控制台中输入一个值并打印
read -p "请输入一个数 num=" NUM
echo "你输入的值为:" $NUM

#10s内在控制台中输入一个数
read -t 10 -p "请在10s内输入" NUM2
echo "你输入的值为:" $NUM2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值