admin 管理员组

文章数量: 887053


2023年12月24日发(作者:decimal什么意思中文翻译)

shell脚本接收来自命令行传入的参数:

第一个参数用$1表示,第二个参数用$2表示,以此类推。。

写一个简单的传参数脚本来测试:

#!/bin/bash

if [ $1 == "start" ]

then

echo "do start"

elif [ $1 == "stop" ]

then

echo "do stop"

else

echo "Please make sure the positon variable is start or stop."

fi

保存为 执行 ./ start 或./ stop

awk的结果如何写入数组中:

写了一个简单的功能:

B=(`awk '/insert overwrite table/ {print $4}' $1`)

echo ${B[1]}

echo ${#B[@]} 输出数组元素个数

如何在变量中定义双引号:

用单引号 lstr='tblist="1111"'

echo $lstr

tblist="1111"

grep获取行号:

grep -nw "k=0"

if判断:

?b 当file存在并且是块文件时返回真

-c 当file存在并且是字符文件时返回真

-d 当pathname存在并且是一个目录时返回真

-e 当pathname指定的文件或目录存在时返回真

-f 当file存在并且是正规文件时返回真

-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真

-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效

-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真

-p 当file存在并且是命令管道时返回为真

-r 当由pathname指定的文件或目录存在并且可读时返回为真

-s 当file存在文件大小大于0时返回真

-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真

-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。

-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。

-eq 等于

-ne 不等于

-gt 大于

-lt 小于

-le 小于等于

-ge 大于等于

-z 空串

= 两个字符相等

!= 两个字符不等

-n 非空串

-e filename 如果 filename 存在,则为真

-d filename 如果 filename 为目录,则为真

-f filename 如果 filename 为常规文件,则为真

-L filename 如果 filename 为符号链接,则为真

-r filename 如果 filename 可读,则为真

-w filename 如果 filename 可写,则为真

-x filename 如果 filename 可执行,则为真

filename1 -nt filename2 如果 filename1 比 filename2 新,则为真

filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真

-z string 如果 string 长度为零,则为真

-n string 如果 string 长度非零,则为真

string1 = string2 如果 string1 与 string2 相同,则为真

string1 != string2 如果 string1 与 string2 不同,则为真

num1 -eq num2 等于

num1 -ne num2 不等于

num1 -lt num2 小于

num1 -le num2 小于或等于

num1 -gt num2 大于

num1 -ge num2 大于或等于

实例1 判断参数是否为空:

if [ -z "$1" ];then

echo "please input parameter"

exit

else

echo "parameter 1: $1"

fi

实例2 判断参数个数小于3个:

if [ $# -lt 3 ] ; then

echo "please input 3 parameter"

exit

else

for var in $*; do

echo "var is $var"

done

fi

linux if命令

无论什么编程语言都离不开条件判断。SHELL也不例外。

if list then

do something here

elif list then

do another thing here

else

do something else here

fi

EX1:

#!/bin/sh

SYSTEM=`uname -s` #获取操作系统类型,我本地是linux

if [ $SYSTEM = "Linux" ] ; then #如果是linux的话打印linux字符串

echo "Linux"

elif [ $SYSTEM = "FreeBSD" ] ; then

echo "FreeBSD"

elif [ $SYSTEM = "Solaris" ] ; then

echo "Solaris"

else

echo "What?"

fi #ifend

基本上和其他脚本语言一样。没有太大区别。不过值得注意的是。[]里面的条件判断。

1 字符串判断

str1 = str2 当两个串有相同内容、长度时为真

str1 != str2 当串str1和str2不等时为真

-n str1 当串的长度大于0时为真(串非空)

-z str1 当串的长度为0时为真(空串)

str1 当串str1为非空时为真

2 数字的判断

int1 -eq int2 两数相等为真

int1 -ne int2 两数不等为真

int1 -gt int2 int1大于int2为真

int1 -ge int2 int1大于等于int2为真

int1 -lt int2 int1小于int2为真

int1 -le int2 int1小于等于int2为真

3 文件的判断

-r file 用户可读为真

-w file 用户可写为真

-x file 用户可执行为真

-f file 文件为正规文件为真

-d file 文件为目录为真

-c file 文件为字符特殊文件为真

-b file 文件为块特殊文件为真

-s file 文件大小非0时为真

-t file 当文件描述符(默认为1)指定的设备为终端时为真

3 复杂逻辑判断

-a 与

-o 或

! 非

结尾

语法虽然简单,但是在SHELL里使用的时候,他的功能变得强大了。


本文标签: 文件 目录 存在 判断 参数