Linux Shell Scripting Cookbook 读书笔记 1

本系列文章为《Linux Shell Scripting Cookbook》的读书笔记,只记录了我以为工做中有用,而我还不是很熟练的命令shell

书是很好的书,有许多命令因为我比较熟悉,可能就没有记录在其中了bash

1. 得到进程的环境变量测试

cat /proc/$PID/environthis

将原先彼此间的null('\0')分隔符替换成换行调试

cat /proc/1194/environ | tr '\0' '\n'blog

 

2. 得到字符串长度进程

length=${#var}ip

 

3. 数字运算字符串

let, (()), []执行基本的算数操做,高级操做使用expr,bcit

let no1++

let no1-=6

result=$[ no1 + no2 ]

result=$[ $no1 + 5 ]

result=$(( no1 + 50 ))

 

4. 调试脚本

#!/bin/bash
function DEBUG()
{
[ "$_DEBUG" == "on" ] && $@ || :
}
echo this is test file
for i in {1..6}
do
DEBUG echo $i
done

Bash中 : 告诉shell不要进行任何操做

$@ 表示全部脚本参数的内容

 

5. 字段分隔符IFS (Internal Field Separator)

#!/bin/bash
passwd=$(cat /etc/passwd)
oldIFS=$IFS;
IFS=$'\n'
for line in $passwd;
do
IFS=":"
count=0
for item in $line;
do
 [ $count -eq 0 ] && user=$item;
 [ $count -eq 6 ] && shell=$item && echo $user\'s shell is $shell;
 let count++
done;
done;
IFS=$oldIFS

第一个IFS的赋值为$'\n',为了第一个for循环按行得到passwd里面的值

第二个IFS赋值为":",为了按:为分隔,取得每一个段的值

其中for循环的主体部分,[]的使用能够做为简洁版的判断语句

 

6. 比较与测试

[ $var1 -ne 0 -a $var2 -gt 2 ] #逻辑与 -a,逻辑或-o

使用&& 以及 || 也能够组合条件

if [[ -n $str1 ]] && [[ -z $str2 ]]; then ...

使用test命令也能够执行条件检测,能够避免使用过多的括号,多个条件使用-a/-o链接

test命令也有更普遍的文件系统相关测试选项,具体查看man test

#!/bin/bash
no1=1
no2=0
test $no1 -eq 1 -a $no2 -gt 1 && echo success || echo fail

 

文件系统相关测试

[ -f $file_var ]  文件路径或文件名

[ -x $var ] 文件可执行

[ -d $var ] 目录

[ -w $var ] 可写

[ -r $var ] 可读

[ -L $var ] 符号连接

[ -e $var ] 若是给定的变量包含的文件存在,则返回真

例如

#!/bin/bash
fpath=/etc/passwd
[ -e $fpath ] && echo file exist || echo file not exist

字符串的比较最好使用双中括号

[[ -z $str ]] 空串返回真

[[ -n $str ]] 非空串返回真

相关文章
相关标签/搜索