当前位置:   article > 正文

Linux学习笔记:Shell脚本_shell脚本内部输出中间变量

shell脚本内部输出中间变量

Shell脚本运算符

计算4×5÷6
方法一:
使用$(())

A=$(((4*5)/6))
echo A=$A
  • 1
  • 2

方法二:
使用$[]

B=$[(4*5)/6]
echo B=$B
  • 1
  • 2

方法三:
使用expr
中间需要使用空格隔开
赋值要使用反引号·

C=`expr 4 \* 5 / 6 `
echo C=$C 
  • 1
  • 2

运行结果:

bash mathrl
A=3
B=3
C=3
  • 1
  • 2
  • 3
  • 4

Shell脚本中的变量

创建,输出,删除变量

#!/bin/bash 
#声明

#创建一个变量
#中间不能使用空格
A=100

#输出变量,使用$
echo $A
echo A=$A
echo "A=$A"
#删除变量
unset A
echo A
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

运行结果

100
A=100
A=100
 
  • 1
  • 2
  • 3
  • 4

静态变量

#创建静态变量 
readonly B=2
#输出
echo $B
#删除变量
unset B
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

运行结果

2
bash: unset: B:无法取消设定: 只读 variable
  • 1
  • 2

静态变量不可被删除

系统变量
在系统中已经设置好的变量

echo $HOME
echo $USER
echo $HOME
#还有很多
  • 1
  • 2
  • 3
  • 4

可以使用set查看系统变量

环境变量
在各个shell脚本中都能使用的变量(全局变量)

var1.sh
#定义一个环境变量
export EX_VAR=10
  • 1
  • 2
  • 3

在另外一个脚本中使用

#加载变量
source var1.sh
#输出变量
echo $EX_VAR
  • 1
  • 2
  • 3
  • 4

运行

10
  • 1

将命令赋值给变量

A=$(ls)
echo $A
  • 1
  • 2

运行结果

var1.sh var2.sh var.sh
  • 1

位置参数变量
$*:输出所有参数(整体输出)
$@:输出所有参数(分别单独输出)
$#:输出参数个数

#!/bin/bash

#输出参数
echo 0=$0 1=$1 2=$2 3=$3
#输出所有参数 方法一
echo 所有参数为$*
#输出所有参数 方法二
echo 所有参数为$@
#输出参数个数
echo $#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运行

#传入参数运行,参数之间用空格分开
bash var2.sh 10 20 30
#结果
0=var2.sh 1=10 2=20 3=30
所有参数为10 20 30
所有参数为10 20 30
3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

预定义变量
$$:当前进程PID
$!:输出当前最后一个后台的进程号
$?:输出最后一个执行命令的状态,为0正常

#!/bin/bash

#输出当前进程的PID
echo 当前进程的PID为$$

#后台运行程序
gedit var.sh &
#输出当前最后一个后台的进程号
echo 最后一个后台进程号$!

#输出最后一个执行命令的状态,为0正常
echo 状态为$?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

运行结果

当前进程的PID为2119
最后一个后台进程号2705
状态为0
  • 1
  • 2
  • 3

Shell脚本if语句

if [ 条件 ] #中括号里面一定要空格
then 命令
fi
  • 1
  • 2
  • 3
if [ 条件 ] #中括号里面一定要空格
then 命令
elif [ 条件 ]
then 命令
...
else 命令
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

[]测试条件参数:
整数判断

参数功能
-eq等于
-ne不等于
-lt小于
–le小于等于
-gt大于
-ge大于等于

字符串判断

参数功能
=等于
!=不等于
str1 < str2小于
str1 >str2大于
str非空为真
-n str长度大于0为真
-z str长度等于0为真

大于小于是以字典顺序排序

文件判断

参数功能
-r可读
-w可写
-x可执行
-f文件存在且存在
-d文件为目录

逻辑运算

参数功能
!
-a
-o

案例1:判断学生成绩,<60不及格,>60和<80及格,>80优秀,其他成绩错误。

#!/bin/bash

if [ $1 -lt 60 -a $1 -ge 0 ]
then
        echo "不及格"
elif [ $1 -lt 80 ]
then
        echo "及格"
elif [ $1 -le 100 ]
then 
        echo "优秀"
else 
        echo "成绩错误"
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

运行结果

bash if1 0
不及格
bash if1 100
优秀
bash if1 120
成绩错误
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

案例2:判断文件权限,可写,可读,可执行,不存在输出文件不存在:

#!/bin/bash

if [ -f $1 ]
then
        echo -n "$1文件"
        if [  -r $1 ]
        then
        echo -n "可读"
        fi
        if [ -w $1 ]
        then
        echo -n "可写"
        fi
        if [ -x $1 ]
        then
        echo -n "可执行"
        fi
else    
        echo "文件不存在"
fi
echo
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

运行结果

bash if2 txt #运行
文件不存在  #结果
touch txt #运行
bash if2 txt #运行
txt文件可读可写  #结果
  • 1
  • 2
  • 3
  • 4
  • 5

Shell脚本case语句

case语句的格式:

case 字符串 in
模式字符串1) 命令 ;;
模式字符串2) 命令 ;;
模式字符串3) 命令 ;;
模式字符串4) 命令 ;;
*)命令 ;;
esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

如果字符串等于模式字符串1-4就执行,如果都不满足,就执行)的命令。*

案例:写一个shell来控制文件,输入1输出文件内容,输入2删除文件,输入3改变文件名称,其他输出错误。
程序如下:

#!/bin/bash

case $1 in
1) cat $2 ;;
2) rm $2 ;;
3) mv $2 $3 ;;
*) echo "指令错误"
esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行如下

qx@qx-VirtualBox:~/桌面/Class/ifelse$ bash case 3 txt atxt
qx@qx-VirtualBox:~/桌面/Class/ifelse$ ls
atxt  case  if1  if2
qx@qx-VirtualBox:~/桌面/Class/ifelse$ bash case 1 atxt
abcdefg

qx@qx-VirtualBox:~/桌面/Class/ifelse$ bash case 2 atxt
qx@qx-VirtualBox:~/桌面/Class/ifelse$ ls
case  if1  if2
qx@qx-VirtualBox:~/桌面/Class/ifelse$ bash case 4 atxt
指令错误
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Shell脚本for语句

格式一:

for 变量 in "值表"
do 
	命令
done
  • 1
  • 2
  • 3
  • 4

格式二:

for (( e1;e2;e3 ))
do
	命令
done
  • 1
  • 2
  • 3
  • 4

和C语言类似,比如for (( i=0; i<100; i++ ))

案例:将输入的所有数进行求和
使用方法一写:

#!/bin/bash

sum=0
for i in " $@ "
do
  sum=$[$sum+$i]
done
echo $sum
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行结果:

bash -x for 1 2 3 4 5
+ sum=0
+ for i in " $@ "
+ sum=1
+ for i in " $@ "
+ sum=3
+ for i in " $@ "
+ sum=6
+ for i in " $@ "
+ sum=10
+ for i in " $@ "
+ sum=15
+ echo 15
15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

使用方法二写:

#!/bin/bash

num=$#
sum=0
for(( i=1; i<=num; i++ ))
do
  sum=$[$sum+$i]
done
echo $sum
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

运行结果:

bash -x for2 1 2 3 4 5
+ num=5
+ sum=0
+ (( i=1 ))
+ (( i<=num ))
+ sum=1
+ (( i++  ))
+ (( i<=num ))
+ sum=3
+ (( i++  ))
+ (( i<=num ))
+ sum=6
+ (( i++  ))
+ (( i<=num ))
+ sum=10
+ (( i++  ))
+ (( i<=num ))
+ sum=15
+ (( i++  ))
+ (( i<=num ))
+ echo 15
15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

Shell脚本while语句

格式:

while [ 条件 ]
do
	指令
done
  • 1
  • 2
  • 3
  • 4

注意:while与中括号需要有空格

案例:将输入的数据进行求和
程序如下:

#!/bin/bash

sum=0
num=0

while [ $# -ne 0 -a $num -lt $# ]
do
  num=$[$num+1]
  sum=$[$sum+$num]
done
echo sum=$sum
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

运行如下:

bash -x while 1 2 3 4 5
+ sum=0
+ num=0
+ '[' 5 -ne 0 -a 0 -lt 5 ']'
+ num=1
+ sum=1
+ '[' 5 -ne 0 -a 1 -lt 5 ']'
+ num=2
+ sum=3
+ '[' 5 -ne 0 -a 2 -lt 5 ']'
+ num=3
+ sum=6
+ '[' 5 -ne 0 -a 3 -lt 5 ']'
+ num=4
+ sum=10
+ '[' 5 -ne 0 -a 4 -lt 5 ']'
+ num=5
+ sum=15
+ '[' 5 -ne 0 -a 5 -lt 5 ']'
+ echo sum=15
sum=15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/877070
推荐阅读
相关标签
  

闽ICP备14008679号