记录一下 Shell 脚本中比较符号的使用,在写 Shell 脚本时方便查询 。
算术比较符
Shell 表示 |
中文含义 |
-gt |
大于 |
-ge |
大于等于 |
-lt |
小于 |
-le |
小于等于 |
-eq |
等于 |
-ne |
不等于 |
字符串比较符
Shell 表示 |
中文含义 |
-z "$var" |
如果 var 为空, 返回 true |
-n "$var" |
如果 var 长度非0, 返回 true |
"var2" |
如果 var1 不等于 var2, 返回 true |
逻辑运算符
Shell 表示 |
中文含义 |
-a |
逻辑与,操作符两边均为真,结果为true,否则为false。 |
-o |
逻辑或,操作符两边一边为真,结果为true,否则为false。 |
! |
逻辑否,条件为false,结果为true。 |
文件操作
Shell 表示 |
中文含义 |
[ -f $file_var ] |
变量 $file_var 是一个正常的文件路径或文件名 (file),则返回true |
[ -x $var ] |
变量 $var 包含的文件可执行 (execute),则返回true |
[ -d $var ] |
变量 $var 包含的文件是目录 (directory),则返回true |
[ -e $var ] |
变量 $var 包含的文件存在 (exist),则返回true |
[ -c $var ] |
变量 $var 包含的文件是一个字符设备文件的路径 (character),则返回true |
[ -b $var ] |
变量 $var 包含的文件是一个块设备文件的路径 (block),则返回true |
[ -w $var ] |
变量 $var 包含的文件可写(write),则返回true |
[ -r $var ] |
变量 $var 包含的文件可读 (read),则返回true |
[ -L $var ] |
变量 $var 包含是一个符号链接 (link),则返回true |
字符串截取
变量参数
- 参数个数
$#
echo $#
- 显示所有参数
$*
echo $*
- 获取参数: $0-9 取第0-9个参数, 如果参数个数超过10,则需要在数字外面加上'{}'
echo $1
echo ${11}
- 获取当前shell的pid:
$$
echo $$
- 获取上一个命令的执行状态:
$?
echo $?
- 截取函数参数:
调用: /bin/bash script.sh "1001 1002 1003 1004 1005" 1 , 脚本里面要赋值给变量a=1005 , b="1001 1002 1003 1004"
#!/bin/bash
function test_fun(){
a=${!#}
b=${@:1:$#-1}
}
这里"1001 1002 1003 1004 1005"会以列表形式传入,用数组的方法行不通的,但是研究一下不难发现分片方法同样适用。
${@:1:$#-1} 其中$@是列表形式列出所有的传入参数,然后:1是从第一个参数开始,后面不加任何东西的话是一直到结尾,
而加:$#-1是$#是参数总个数-1,即显示除去最后一个参数外的所有参数。
若要获取倒数第二个参数即: c=1004,可以这样实现:
c=${@:$#-1:1}
环境运行
-x 显示脚本的执行过程,及结果
-v 显示脚本中的各行
-n 解决但不执行
+ set -v #前面有+, 表示显示脚本的执行过程
set -n
+ set -n #前面有+, 表示显示脚本的执行过程
### set -x例子:
curdir=`dirname $0` #脚本并没有执行,只是直接打印出来了
echo 'shell file current directory = '$curdir
Shell文件中的 三大引号 的含义及用法
- 倒引号: [`]: 如果被“倒引号”括起来, 表示里面需要执行的是命令.
比如 `dirname $0`, 就表示需要执行 dirname $0 这个命令
- 双引号: [""]: 被双引号括起来的内容, 里面出现
$(美元号: 表示取变量名)
`(倒引号: 表示执行命令)
\(转义号: 表示转义)
其余的才表示字符串。
- 单引号: ['']: 被单引号括起来的内容, 里面所有的都表示字符串本身,也不会解析变量内容,包括上面所说的 "三个特殊字符"
文件路径, 文件名
-
dirname 文件名(file)
: 返回文件所在的路径,这个路径是根据你传入的参数 '文件名相关的', 传入相对的,返回相对的,传入绝对的,返回绝对的.
[test@2288 online]$ dirname sbin/test.sh
sbin
[test@2288 online]$ dirname /home/test/sbin/test.sh
/home/test/sbin
## dirname 一个小例子,及执行过程:
curdir2=$(cd `dirname $0`/.. && pwd);
+++ dirname test.sh #第一步
++ cd ./.. #第二步 cd .. 等于 cd ./..
++ pwd #第三步
命令相关
- $(shell命令)
- `shell 命令`
上面2条语句,执行 Shell 命令并返回执行结果。
操作符: $()`` 比 ``(反单引号的作用一样)更直观一些,在多层嵌套的命令行中,$()使用更方便。
命令别名
alias ll='ls -al'
alias lp='ls -al'
在命令行中,输入ll 和 lp, 效果是一样的.
alias最好 添加在 本账户根目录(一般是 /home/user_name)的.bash_profile文件中。
添加完成后 souce .bash_profile文件, 使操作生效.