shell脚本

本文详细介绍了shell脚本的执行方式、不同类型的变量(位置变量、环境变量和用户自定义变量)、流程控制(如if、case、for和while)以及处理变量和执行测试的方法。此外,还涵盖了环境变量的作用和如何在脚本中使用它们。
摘要由CSDN通过智能技术生成

shell脚本是一种shell编写的脚本程序,将一些命令写入到文件中,然后用shell解析执行。

1、执行方式

1、chmod +x test.sh
   ./test.sh    #test.sh是创建的脚本文件(以.sh为后缀),可以用touch命令创建,也可直接vi创建
2、bash test.sh
3、source test.sh

区别:第一种执行方法需要赋予文件可执行权限,bash和source不需要执行权限即可运行。bash和 ./ 是在子终端运行后将结果显示在当前终端,source是直接在当前终端运行。

2、shell变量

shell有3种类型的变量,分别为位置变量、环境变量和用户自定义变量。

用户自定义变量

shell脚本中,所有变量都是字符串,且不需要声明(不支持数据类型)。

shell定义变量时不需要规定数据类型,变量名不加美元符号,变量名和等号之间不能有空格。使用一个定义过的变量,要在变量名前面加美元($)符号或使用 ${变量名}。

#!/bin/bash    
num=12
ch=a
echo "$num"
echo "${a}"  #{}里变量两边不能有空格

#! :用来声明脚本由什么shell解释,否则使用默认shell 

位置变量

位置变量是预先就设置好具有特殊含义的变量,可以直接使用。常用的位置变量有:

$0文件名,也就是脚本文件名
$n第n个参数
$#输入参数的个数
$@所有参数的内容
$$当前进程号
$?程序执行返回的状态。成功为0,失败为1
$*所有参数的内
#!/bin/bash
echo "脚本名:$0"
echo "第一、二个参数:$1,$2"
echo "参数个数:$#"
echo "所有参数:$*"
echo "返回值:$?"
echo "进程号PID:$$"
echo "所有参数:$@"

 

环境变量 

环境变量保存一些路径信息。

PATH可执行程序或命令的路径,以冒号分割
HOME打印用户家目录
SHELL显示当前shell类型
PWD显示用户当前所在位置的绝对路径
UID打印当前用户id信息
USER打印当前用户名
#!/bin/bash
echo "home:$HOME"
echo "path:$PATH"
echo "uid:$UID"
echo "user:$USER"
echo "pwd:$PWD"
echo "shell:$SHELL"

特殊符号 

" " 双引号可以解析变量的值。双引号内部使用变量,可以正常输出。

' ' 单引号不能解析变量的值,单引号里无论什么内容都会作为字符串输出

` ` 反引号是命令置换符。将` `里的命令实现的内容赋给变量

\ :转义字符,使用echo输出要加参数 -e 才能实现转义

#!/bin/bash
num=100
echo "num is $num"
echo 'num is $num'

ls
ch=`ls` #将ls命令实现的内容赋给变量ch
echo "显示当前目录下的文件:$ch"

echo "num = $num\n"  
echo -e "num = $num\n"  #因为echo本身自带换行效果,所以num=100后会空一行
printf "num=%d" $num    #printf的使用与C语言中类似

 

3、流程控制语句

测试语句

1、test  测试语句

2、[ 测试语句 ]  #测试语句的前后都要有空格。

测试语句的结果为真返回0,为假返回1

-eq    等于
-ne    不等于
-lt      小于
-le     小于等于
-gt     大于
-ge    大于等于
-a      与 &&
-o      或 ||
!        非

算数运算

1、(( 表达式 )):要使用(( 表达式 ))的结果,需要在最前面加$符号。使用变量时可加$,也可不加$,运算符之间可加空格,也可没有。

2、$[ 表达式 ]:必须用变量接收结果,例 ret=$[a+b],使用变量时可加$,也可不加$,运算符之间可加空格,也可没有。

3、let:let要写在最开始,$可加可不加,运算符之间不能有空格

4、expr:本身就有输出功能;运算符前后必须有空格(做运算使用);使用变量必须加$

完整的表达式要被 ` `(反引号)包含,例:val=`expr 2 + 2`

进行乘法运算要用转义字符,不加会认为是通配符 /*

小括号要使用转义字符,不加会认为是数组 /( /)

尖括号要使用转义字符,不加会认为是重定向符 /< />

 结构语句

if

if条件语句:if开头,fi结尾。else或elif进行多条件判断,若要写在一行,需用“;”隔开,else后不跟测试语句。

# 单分支语句
    if 测试语句
    then
        语句1
    fi
# 多支条件语句 
    if 测试语句1
    then
        语句1
    elif 测试语句2
    then
        语句2
    else
        语句2
    fi  

#比较两个数的大小
#!/bin/bash
read -p "输入a的值:" a #read是输入命令,read -p:显示提示内容
read -p "输入b的值:" b
if [ $a -gt $b ]     #比较符两侧一定要有空格
then
    echo $a
else
    echo $b
fi

 

case

case语句:case中的模式匹配是比较字符串是否相同;每个模式必须以右括号结束,命令结尾以双分号结束。

case 模式名  in
  模式 1)
    命令
    ;;
  模式 2)
    命令
    ;;
*)    -->其他情况
    命令
    ;;
esac

#给成绩评级,[90-100]为A,[80-90)为B,[60-80)为C,[0-60)为D
#!/bin/bash
read -p "输入num的值:" num
case $num in
	9[0-9]|100) # | 是或者的意思
	echo "A"
	;;
	8[0-9])
	echo "B"
	;;
	6[0-9]|7[0-9])
	echo "C"
	;;
	[1-5][0-9]|[0-9])
	echo "D"
	;;
	*)
	echo "num error"
	;;
esac
for

  for 变量名 in 取值列表
  do
    语句 1
  done

#计算0-100的偶数和
#!/bin/bash
sum=0
for i in {0..100}
do
	if [ $((i%2)) -eq 0 ]
	then
		sum=$(($sum + $i))
	fi
	i=$(( i+1 ))
done
echo $sum

while

   while 测试语句
   do
         语句1
   done

#计算1-10的乘积
#!/bin/bash
n=1
sum=1
while [ $n -le 10 ]
do
	sum=$((sum*n))
	let n=n+1
done

echo "sum=$sum"

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值