shell变量之位置变量和专用参数(sy6.5)

童鞋们,Shell变量分为环境变量、本地变量、位置参数变量和特殊变量,实际使用中,四者有一定的重叠性。Shell变量是用好Shell编程的基础,灵活恰当的使用变量可以简化脚本复杂度,提高脚本运行效率和可读性。把ppt讲义中的例子在实际环境中验证下,请自行理解。^v^

 位置参数和专用参数的例子:

位置参数

一组特殊的内置变量

  • 跟在脚本名后面的用空格隔开的每个字符串
  • $1 表示第1个参数值,……$9 表示第9个参数值
  • ${10} 表示第10个参数值, ${11} 表示第11个参数值, ……

位置参数的用途

  • shell 命令/脚本 的命令行接受参数
  • 在调用 shell 函数时为其传递参数

专用参数

命令行参数相关

  • $*        将所有位置参量看成一个字符串(以空格间隔) 。
  • $@      将每个位置参量看成单独的字符串(以空格间隔)。
  •  “$*”   将所有位置参量看成一个字符串(以$IFS间隔)。
  •  “$@” 将每个位置参量看成单独的字符串(以空格间隔) 。
  • $0       命令行上输入的Shell程序名。
  • $#       表示命令行上参数的个数。

进程状态相关

  • $?  表示上一条命令执行后的返回值
  • $$  当前进程的进程号
  • $!   显示运行在后台的最后一个作业的 PID
  • $_  在此之前执行的命令或脚本的最后一个参数

退出状态

  • $?返回上一条语句或脚本执行的状态
    • 0:成功
    • 1255:不成功
  • exit 命令用于退出脚本或当前Shell
    • n 是一个从 0 255 的整数
    • 0 表示成功退出,非零表示遇到某种失败
    • 返回值 被保存在状态变量 $?

<<ifsarg.sh>>

使用bash执行:bash vartest.sh 1 ‘2 3’ 4 5 a b c d e f g

执行:bash vartest.sh 1 '2 3' 4 5 a b c d e f g

------------------

<<vartest.sh>>

使用bash执行:bash ifsarg.sh 1 ‘2 3’ 4 5 a b c d e f g

------------------

<<t_shift.sh>>

使用bash执行:bash t_shift.sh 1 a 3 b 5 c 7

执行:bash t_shift.sh a ‘1 2 4’ c 5 e 9

-------------------

wins编辑的sharelinux中的运行出现提示符的注意事项:

wins手动编辑的:

#!/bin/sh

# This script demonstrates variables and the 'shift' command in shell

echo "example!!!"

WOW="hi,boy"

DX1A='YGU-dx1a'

clear

echo " $WOW, My name is beautiful girl from $DX1A"

echo "Home Directory: $HOME"

echo "command line here is:"

echo "$0 $*"

echo "Before shift operation"

echo "No. of arguments = $#"

echo "All the arguments: $*"

echo "\$0 = $0, \$1 = $1, \$2 = $2"

shift                

echo "After one shift operation"

echo "No. of arguments: $#"

echo "All the arguments: $*"

echo "\$0 = $0, \$1 = $1, \$2 = $2"

然后运行bash variable.sh 1 3 5 7 9

出现以下错误:clear\rcommand not found

查找了原因:

是 Windows 和 Linux 的 .sh 脚本文件格式不同,如果在脚本中有空行,脚本是在 Windows 下进行编辑之后上传到 linux 上去执行的话,就会出现这个问题。

windows 下的换行符是\r\n,而 linux 下的换行符是\n,没有识别/r,所以会导致上述的报错,这个属于脚本编码的问题。

解决方式:

vim

:set ff=unix回车

ESC : wq保存退出后再运行显示正常:

同理,其他在wins下copy过去/编辑的都需要:set ff=unix后,可执行:

./2greet.sh和bash 2greet.sh实现相同的结果(前置需要+x权限)

如下图所示,在输入vi 2greet.sh后输入了:set ff=unix回车,然后esc : wq退出。

 greet.sh也是如下:

文档结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个在高校打杂的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值