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

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

1. 获得进程的环境变量

cat /proc/$PID/environ

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

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

2. 获得字符串长度

length=${#var}

3. 数字运算

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

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 ]] 非空串返回真

Linux Shell Scripting Cookbook 读书笔记 1的更多相关文章

  1. Linux Shell Scripting Cookbook 读书笔记 2

    cat,script,find, xargs, tr, tmp文件,字符串截取,批量文件重命名,固定大小文件,自动化交互 1. cat的用法 压缩连续的空白行 cat -s file 也可以用tr,将 ...

  2. Linux Shell Scripting Cookbook 读书笔记 7

    ping, du, ps, kill, 收集系统信息 判断网络中哪些主机是活动主机 #!/bin/bash for ip in 10.215.70.{1..255}; do ( ping $ip -c ...

  3. Linux Shell Scripting Cookbook 读书笔记 6

    wget,curl, tar, rsync wget ftp://example.com/somefile.img -t 5 -O download.img -o log -t表示重试的次数 -O指定 ...

  4. Linux Shell Scripting Cookbook 读书笔记 5

    sed,awk 1. sed (string editor) 使用-i可以将结果运用于原文件 sed 's/text1/text2/' file > newfile mv newfile fil ...

  5. Linux Shell Scripting Cookbook 读书笔记 4

    正则, grep 1. 正则表达式  正则表达式  描述  示例 ^ 行起始标记  ^hell匹配以hell开头的行 $ 行尾标记  test$匹配以test结尾的行 . 匹配任意一个字符  hell ...

  6. Linux Shell Scripting Cookbook 读书笔记 3

    patch, tree, head ,tail 1. 创建不可修改文件 chattr +i file chattr -i file 移除不可修改属性 2. 能够启动闪存或硬盘的混合ISO isohyb ...

  7. 《The Linux Command Line》 读书笔记02 关于命令的命令

    <The Linux Command Line> 读书笔记02 关于命令的命令 命令的四种类型 type type—Indicate how a command name is inter ...

  8. 《The Linux Command Line》 读书笔记01 基本命令介绍

    <The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...

  9. 《Linux内核分析》读书笔记(四章)

    <Linux内核分析>读书笔记(四章) 标签(空格分隔): 20135328陈都 第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行 ...

随机推荐

  1. ★Java语法(一)——————————标识符

    1.定义:用来标识类名.变量名.方法名.数组名.文件名的有效字符序列: 2.命名规则:a 由字母.数字._(下划线)和$(美元符号)组成 b 数字不能作为第一个字符 c 不能是Java中的关键字和保留 ...

  2. linux route命令的使用详解(转)

    route命令用于显示和操作IP路由表.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是 为了解决以下问题:该Linu ...

  3. java中负数的补码转换为十进制

    一个数如果为正,则它的原码.反码.补码相同:一个正数的补码,将其转化为十进制,可以直接转换. 已知一个负数的补码,将其转换为十进制数,步骤: 1.先对各位取反: 2.将其转换为十进制数: 3.加上负号 ...

  4. 【sqli-labs】 less18 POST - Header Injection - Uagent field - Error based (基于错误的用户代理,头部POST注入)

    这次username和password都进行了输入校验 但是ip和uagent没有校验 当我们用admin admin登陆成功后,就会一条插入语句 由于程序无条件的信任了浏览器的header信息,那么 ...

  5. DD打卡

    一.安装逍遥安卓模拟器 二.安装钉钉 三.设置当前GPS座标 位置模拟器: 链接: https://pan.baidu.com/s/1TC5QkrGAgHOJWtzJnX6vhA 提取码: bpu8 ...

  6. C++ (带有默认参数的函数参数)缺省函数参数

    缺省参数?在C++中,允许实参的个数与形参的个数不同.在声明函数原型时,为一个或者多个形参指定默认值,以后调用这个函数时,若省略某一个实参,c++则自动的以默认值作为相应参数的值. 实列说明:#inc ...

  7. Java导出Excel(附完整源码)

    导出excel是咱Java开发的必备技能啦,之前项目有这个功能,现在将其独立出来,分享一下.所用技术就是SpringBoot,然后是MVC架构模式.废话不多说,直接上代码了,源码点末尾链接就可以下载. ...

  8. inherit 关键字使得元素获取其父元素的计算值

    它可以应用于任何CSS属性,包括CSS简写 all. 对于继承属性,inherit 关键字只是增强了属性的默认行为,只有在重载(overload)其它规则的时候被使用.对于非继承属性,inherit ...

  9. null值处理

    一,在实体类的上面加注解 import com.fasterxml.jackson.annotation.JsonInclude @JsonInclude(JsonInclude.Include.NO ...

  10. PAT_A1136#A Delayed Palindrome

    Source: PAT_A1136 A Delayed Palindrome (20 分) Description: Consider a positive integer N written in ...