shell script 练级笔记(一)

scrpit的执行方式差异

不同的执行方式会给script带来不同的结果,主要是bash的环境。

script的执行方式分为二大类

直接下达指令(文件必须具备可执行权限)

​ 绝对路径 :/home/xxx/yyy.sh

​ 相对路径: ./yyy.sh

​ 环境变量PATH里:将shell script文件放到PATH指定的路径下,可以直接通过文件名执行 yyy.sh

bash程序来执行

​ 通过 bash yyy.sh 或者 sh yyy.sh来执行

利用source或者 . 来执行

​ source yyy.sh 或者 . yyy.sh

使用前两者执行的方式,系统会使用一个新的bash环境来执行,执行结束后,结果不会回传到现在的bash环境里。

name="hao" 
echo -e "${name}"

也就是说,通过第一种方式执行结束后,回到当前bash环境下,没法获取变量name的值。

通过第三种方式,系统直接在当前bash下来执行,即使程序结束,变量依然有效。

shell script使用判断式

1.test判断式

判断文件类型

-e 判断文件名是否存在

-f 判断文件名是否存在且为文件

-d 判断文件名是否存在且为目录

判断文件权限

-r 判断文件是否存在且具有可读的权限

-w 判断文件是否存在且具有可写的权限

-x 判断文件是否存在且具有可执行的权限

两个文件之间的比较

test file1 -nt file2 判断file1是否比file2新

-nt 文件1是否比文件2新

-ot 文件1是否比文件2旧

-ef 文件1是否与文件2是否为同一个档案,主要用在判断 hard link的上

关于两个整数之间的判定

-eq 是否相等

-ne 两数值不相等

判断字符串的数据

test -z string 判断字符串是否为0 ,若string为空串,则为true

test -n string 判断字符串是否非为0

test str1 = str2 判断是否相等

test str1 != str2 判断是否不相等

多重条件判定

test -r file1 -a -x file1

-a and 两状况同时成立

-o or 两状况任意一个成立

! 反状态 例如 test ! -x file 当文件file不具有可执行权限时返回true

#判断文件名是否存在
test -e /root

使用判断符号 []

除了上面的test之外,[]中括号也是常用的判断式,可以结合if 判断式使用。

注意事项:

  1. [ ] 两端要有空格,每个内容之间都要有空格
  2. 变量要以双引号括起来
  3. 常量 用单引号或者双引号
#判断某一个变量是否为空
[ -z "${name}"];echo $?
#判断两个变量是否相等
[ "${name}" == "${}" ]

在bash中 "="和 ""是一样的,为了和其它程序语言保持习惯,还是用“”来比较变量让大家更好理解。

shell script的默认变量

在执行script脚本时,后面可以跟参数。

sh ./test.sh op1 op2 op3 op4

在上面的例子中

​ $0 代表执行文件名 这里是 test.sh

​ $1 代表第一个参数 这里是 op1

​ ······

通过这样的功能,我们就可以在shell script里直接引用参数了

其它功能

$# 代表后面参数的个数,上述例子为 4

$@ 代表 “op1” “op2” “op3” “op4” ,每个变量是独立的,用双引号括起来

$* 代表 “op1 op2 op3 op4” 中间默认用 空格 分割

echo "The script name is ===> $0"
echo "Total parameters number is ===> $#"
[ "$#" -lt 2 ] && echo "the number of parameter is less than 2. Stop here" && exit 0
echo "your whole params is ===> '$@'"
echo "the first param is ===> $1"
echo "the second param is ===> $2"

执行上述代码可以测试该部分功能

shift可以偏移参数号码

修改下上述代码

echo "Total parameters number is ===> $#"
echo "your whole params is ===> '$@'"
shift
echo "Total parameters number is ===> $#"
echo "your whole params is ===> '$@'"
shift 3
echo "Total parameters number is ===> $#"
echo "your whole params is ===> '$@'"

上述程序跟着这些参数 one two three four five six

会依次如下显示

Total parameters number is ===> 6
your whole params is ===> ‘one two three four five six’
Total parameters number is ===> 5
your whole params is ===> ‘two three four five six’
Total parameters number is ===> 2
your whole params is ===> ‘five six’

shift会移动变量,可以跟数字,代表拿掉前面几个参数的意思,类似于删除。

发布了5 篇原创文章 · 获赞 7 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/cijiancao/article/details/104481069