Linux下Bash编程之位置和特殊变量(四)

1.bash位置变量:

$1, $2, ...第1个参数,第二个参数,...

shift 轮询替换,剔除

举例说明:利用脚本解释位置变量的意思,创建如下脚本:

nano shift.sh 创建一个脚本文件,新增以下内容

#!/bin/bash

#

if [ $# -lt 5 ]; then   脚本后面参数不少于5个

echo "./shift.sh ARG1....ARG5"

exit 5

fi

echo "ARGS:$1 $2 $3 $4 $5" 分别显示第1至第5个参数

echo $1  显示脚本后面的第一个参数

#shift   注释,默认向前剔除1个参数

shift 2  向前剔除2个参数,第3个参数变第1个参数

echo $1  虽显示脚本后面第1个参数,实际是脚本的第3个参数

shift 2  向前剔除2个参数, 第5个参数变第1个参数

echo $1  虽显示脚本后面第1个参数,实际是脚本的第5个参数

./shift 1 2 3 4 5 执行结果显示如下

2.bash特殊变量:

$?:执行状态码返回值

$#:参数的个数

$*: 参数列表

[email protected]:参数列表

举例说明:创建一个脚本,脚本后面至少跟一个参数,并且显示参数个数及列表,否则退出此脚本

vim special.sh 创建脚本文件

#!/bin/bash

#

if [ $# -lt 1 ]; then

echo "Usage:./special.sh ARG1 [ARG2...]"

exit 9

fi

echo "\$# is $#"  显示参数个数

echo "\$* is $*"  列表

echo "\[email protected] is [email protected]"  列表

chmod a+x special.sh 授于执行权限

./special /etc/passwd /etc/shadow /proc

3.文件测试:

-e FILE:测试文件是否存在

-f FILE: 测试文件是否为普通文件

-d FILE: 测试指定路径是否为目录

-r FILE: 测试当前用户对指定文件是否有读取权限;

-w FILE: 测试当前用户对指定文件是否有写入权限;

-x FILE: 测试当前用户对指定文件是否有执行权限;

4.脚本退出命令

exit n  n使用0-255的退出状态码数值

PS:如果脚本没有明确定义退出状态码,那么最后执行的一条命令的退出码即为脚本的退出状态码;

举例说明:指定一个文件:如果是一个普通文件,就显示file;如果是一个目录,显示directory;

否则,此为无法识别的文件;请创建这样的脚本文件

vim exist.sh 创建脚本文件

#!/bin/bash

FILE=/etc/rc.d/rc.sysinit

if [ ! -e $FILE ]; then   判断文件是否存在

echo "NO such $FILE"

exit 88          不存在退出当前脚本,退出码为88,可在0-255之间随意写

fi

if [ -f $FILE ]; then       判断是否为文件

echo "$FILE is file"

elif [ -d $FILE ]; then      判断是否为目录

echo "$FILE is directory"

else

echo "I do not known this $FILE"  不认识的文件

fi

5.测试脚本

bash -n 脚本 语法错误检查:

bash -x 脚本:单步执行步骤

bash -x exist.sh 测试脚本执行步骤

时间: 2024-11-03 03:24:48

Linux下Bash编程之位置和特殊变量(四)的相关文章

linux下Bash编程组合测试及编写脚本(五)

linux下Bash编程组合测试及编写综合脚本(五) 1.Bash编程组合测试条件 -a: 与关系 -o: 或关系 !: 非关系 表示方法1:[ $# -gt 100 -a $# -le 500 ] 表示方法2:[ $# -gt 100 ] && [ $# -le 500 ] 2.编写一个任意添加与删除用户的脚本,要求如下: 2.1:如果脚本选项是--add:,将添加用户; 如果选项是--del,将删除用户,如果是--help显示帮助信息 2.2:脚本选项后面的参数可任意指定多个用户并且用

linux下Bash编程循环语句特殊用法之编写脚本(十)

linux下Bash编程while语句特殊用法之编写脚本(十) 1.循环控制: break:中断整个循环语句,即退出循环后执行脚本后面的语句 continue:中断当前本次循环,提前进入下一轮循环 exit:结束脚本运行 2.while死循环,即当不知道循环多少次时 格式 : while :; do 循环语句 done 3.while从输入重定向文件中每行读取并赋值给read变量 格式:  while read LINE;do 循环语句 done < 路径文件 4.实例脚本 4.1.找出/etc

Linux下Bash编程之变量详解(一)

1.语言分类: 1.1.静态语言:编译型语言 强类型:变量在使用前,必须事先声明,甚至还需要初始化: 编写的程序事先转换成可执行格式 代表有:C.C++.JAVA.C# 动态语言:解释型语言 弱类型:变量用时声明,甚至不区分类型: 编写的程序边解释边执行 代表有: PHP.SHELL.python.perl 1.2.面向过程编程语言:代表有 Shell, C 1.3.面向对象编程语言: 代表有 JAVA, Python, perl, C++ 结论:shell属于弱类型编程语言 2.shell编程

linux下Bash编程case语句及编写脚本(八)

1.case语句,格式如下: case 变量 in 值1) 语句1 ... ;;  每分支语句以分号结束 值2) 语句2 ... ;; *)    其他,相当于if语句else 语句3 ... ;; esac   整条case语句结束 2.编写一个任意添加与删除用户的脚本,要求如下: 2.1:如果脚本选项是-a或--add:,将添加用户; 如果选项是-d或--del,将删除用户, 如果是-h或--help显示帮助信息,如果是-v或--verbose显示执行过程,否则不显示执行过程 2.2:脚本选

linux下Bash编程字符测试与for循环语句(五)

1.字符测试: ==:测试是否相等,相等为真,不等为假 !=: 测试是否不等,不等为真,等为假 >,<,>=,<= -n string: 测试指定字符串是否为空,空则真,不空则假 -z string: 测试指定字符串是否不空,不空为真,空则为假 2.for循环:进入条件,退出条件 for 变量 in 列表; do 循环体 done 生成列表: {1..100}:表示为1至100的数,步长为1 seq [起始数 [步进长度]] 结束数 例如: seq 1 100 默认步长为1 dec

Linux下Bash编程之條件判斷详解(二)

bash中实现条件判断: 条件测试类型:整数,字符,文件 条件测试的表达式: [ 表達式 ]  進行整數判斷 [[ 表達式 ]] 進行整數判斷 test 表達式 整数比较: -eq: 测试两个整数是否相等: -ne: 测试两个整数是否不等:不等,为真:相等,为假: -gt: 测试一个数是否大于另一个数:大于,为真:否则,为假: -lt: 测试一个数是否小于另一个数:小于,为真:否则,为假: -ge: 大于或等于 -le:小于或等于 命令的间逻辑关系: 逻辑与: && 第一个条件为真时,第二

linux下Bash编程之数组Array详解

1.Array数组与变量概念与区别 变量是一段内存空间,并且变量与变量之间是多数是不连续的内存空间 Array数组是由多个变量组成,数组中的变量称为元素,数组中的元素是连续的内存空间 2.声明数组 declare -a 数组名 例如:声明一个数组STU并初始化值 写法1: declare -a STU STU[0]=Willow STU[1}=Tom STU[2]=Redhat 写法2: STU=(Willow Tom Redhat) #元素之间用空格隔开,元素从0开始依次赋值,不能跳跃 写法3

Linux下Bash编程之算术运算符详解(三)

shell算术运算表示如下: 1.let 算术运算表达式 let C=$A+$B 2.$[算术运算表达式] C=$[$A+$B] 3.$((算术运算表达式)) C=$(($A+$B)) 4.expr 各操作数及运算符之间要有空格,且要使用命令引用 C=`expr $A + $B` 举例说明: 1.指定一个用户,判断用户密码剩余使用期限是否已经小于警告期限: 如果小于警告期限,则显示"Password will expire --> Warning":否则,就显示"OK&

linux下Bash编程until语句及格式化硬盘分区等编写脚本(十)

1.循环语句结构总结 1.1.while语句当条件满足时,进入循环语句 while 条件; do 语句 done 1.2.until语句当条件不满足时,进入循环语句 until 条件; do 语句 done 1.3.for 变量 in 列表; do 循环体 done 1.4.for (( 表达式1; 条件 ; 表达2 )); do 循环体 done 2.编写如下脚本,要求是:通过ping命令测试1.1.1.1到1.1.1.30之间的所有主机是否在线, 如果在线,就显示"$IP is up.&qu