hao对《Linux Shell脚本攻略》的笔记(3)
-
第28页 小试牛刀
Shell程序会读取.sh文件首行,查看是不是#!/bin/bash,如果是,就在内部展开为/bin/bash [*.sh]执行sh文件。 当打开终端的时候,一般为ctrl+T,该终端会读取一组命令,设置文本,字体颜色等,这组命令来自于用户home目录中的.bashrc文件(~/.bashrc)。Bash还维护了一组历史记录,在文件~/.bash_history中。 Bash中每个命令都是以分号和换行来分隔的。 如果你希望echo打印感叹号(!),就不要把带有感叹号的字符串放入双引号中,可以在感叹号前加个‘ \ ’转义。 echo后面使用单引号有个问题,如果里面有个$var,那么它是不会对$var求值的。当然,还有个命令printf,跟C语言的用法差不多。 引自 小试牛刀 打印彩色输出
echo -e "\e[1;31m This is a text file \e[0m" 这输出就是红色,31是红色,0是重置回去。替换31这个数字为相应的颜色数字就可以了。 在Bash中,每个变量的值都是字符串,无论加不加引号。 如果有个叫gedit的程序正在运行,那么用pgrep gedit就能获得gedit进程的PID。然后通过替换$PID,就可以cat /proc/$PID/environ 查看此进程的环境变量。这样会输出一堆环境变量,它们之间以'\0'分隔,所以为了看清晰一点,可以用tr命令进行字符替换成'\n'换行符,cat /proc/$PID/environ | tr '\0' '\n'这样就好了。 引自 小试牛刀 变量
变量赋值 var=value 如果value中有空格,必须用单引号或双引号包含起来。赋值千万不能var = value写,带空格,这样就是判断相等了,就不是赋值了。在变量名加$前缀就可以求值,$var ${var}。 引自 小试牛刀 环境变量
环境变量是未在当前进程中定义,而从父进程中继承过来的。用export导出一个环境变量,这样就可以被子进程继承了。 $PATH环境变量通常定义在/etc/enviroment或/ect/profile,~/.bashrc中。如果要在$PATH中新增一条,可以export PATH=”$PATH:/home/usr/bin“。 引自 小试牛刀 获取字符串长度
echo "${#var}" var是变量名。 引自 小试牛刀 检查用户是否是超级用户
root用户的$UID是0 if [ $UID -ne 0 ];then echo "not a root user" else echo "is a root user" fi 引自 小试牛刀 通过shell进行数学运算
let运算符可以直接进行数学计算,这样变量名前也不需要$。 let result=var1+var2 let var++ let var-- let var+=6 let var-=4 其他方法: result=$[ no1 + no2 ] result=$[ $no1 + no2 ] result=$(( no1 + no2 )) result=`expr 3 + 4` result=$(expr $no1 + 3) 以上都只能支持整数,不支持浮点数,要支持需要这样,利用bc这个高级点的工具: echo "4 * 0.56" | bc no1=5; result=`echo "$no1 * 1.5" | bc` 可以设定经度范围 echo "scale=2; 3/8" | bc 保留2位小数 进制转换 echo "obase=2;100" | bc 十进制100转换成二进制 echo "obase=10;ibase=2;1100100" | bc 二进制输入转十进制输出 计算平方和平方根 echo "sqrt(100)" | bc echo "10^10" | bc 引自 小试牛刀 -
第42页 小试牛刀
玩转文件描述符和重定向
最常见的文件描述符是stdout,stderr,stdin.可以将某个文件描述符中的内容重定向到另一个文件描述符中。 文件描述符: 0-----------stdin 1-----------stdout 2----------stderr 平时这样的重定向都默认为1, echo "Fuck you bitch\!" > output.txt echo "Fuck" 1> output.txt 以上两行命令效果一样,都是将stdout定向到一个文件中。 还可以将某个命令的错误stderr定向到文件中: ls + 2> output.txt 因为ls + 会产生错误提示打印到控制台上。这样用以上方法,错误提示就会打印到文件中去了。 cmd 2>err.txt 1>out.txt 以上命令是分别把错误定到err.txt中把正常输出定到out.txt中。 cmd 2>&1 output.txt 以上命令是把stderr转换到stdout,所以才使得,错误和正常输出都定向到文件中。 将文件充定向到命令,文件充的内容当作cmd的stdin读入。 cmd < file 自定义文件描述符---文件描述符是指向文件的一个抽象指针 exec 3< input.txt 使用文件描述符3以读取的方式打开input.txt文件 cat <&3 使用文件描述符3把描述内容导入cat,cat产生输出,意思就是输出input.txt文件的内容 exec 4> input.txt 创建一个文件描述符4,以写入方式打开。 echo "Hello" >&4 向文件描述符4中写入Hello,也就是向input.txt中写入Hello。 exec 5>> out.txt 创建一个文件描述符5,以追加模式打开。 echo "new line" >&5 echo "new line" >&5 引自 小试牛刀 数组和关联数组
普通数组只能用整数作为索引,而关联数组能用字符串作为索引。 var_array={1 2 3 4 5 6} 打印特定内容: echo ${var_array[0]} index = 5 echo ${var_array[$index]} 以清单形式打印出数组中的所有值: echo ${var_array[*]} echo ${var_array[@]} 打印数组长度: echo ${#var_array[*]} 关联数组借助散列技术。 定义关联数组: declare -A friuts friuts=([apple]='100 dollars' [orange]='150 dollars') echo ${friuts[apple]} 列出数组索引: echo ${!friuts[*]} 引自 小试牛刀 使用别名
alias cmd='cmd sequence' alias install='sudo apt-get install' 此命令只是暂时的,一旦关闭终端就无效。所以一般设置在~/.bashrc里。 引自 小试牛刀 调试脚本
bash -x [*.sh] 打印出每行命令的当前状态 定义函数: function frame(){ statement } frame arg1 arg2 $1 $2为参数1,参数2,往下类推. Bash支持函数递归,不过是4.0开始的。 fork炸弹: :(){: | : &};: 引自 小试牛刀 -
小试牛刀
导出函数
函数也能像环境变量那样被导出,这样函数的作用域就可以在子进程中生效了。 export -f function_name 引自 小试牛刀 读取命令序列输出
cmd_output=$(cmd1 | cmd2 | cmd3) 或者cmd_output=`cmd1 | cmd2 | cmd3` echo ${cmd_output} 引自 小试牛刀 不用按回车读取键盘输入
read -n 3 var 从键盘上读取3个字符村存入var变量中 引自 小试牛刀
hao的其他笔记 · · · · · · ( 全部427条 )
- P2P网络技术原理与C++开发案例
- 5
- 大话移动通信
- 1
- 图解网络硬件
- 1
- 写给大家看的C++书
- 1
- Orange'S
- 1
- 虚拟机
- 1
- 大规模C++程序设计
- 10
- HTTP权威指南
- 3
- C++ API设计
- 8
- C++语言的设计和演化
- 5
- 构建嵌入式LINUX系统
- 3
- 七周七语言
- 15
- 链接器和加载器
- 1
- Windows网络与通信程序设计
- 2
- Windows核心编程(第5版)
- 16
- C++GUI Qt4编程
- 3
- 图解TCP/IP (第5版)
- 12
- Python学习手册
- 5
- 编写可读代码的艺术
- 14
- 你一定爱读的极简欧洲史
- 2
- 短码之美
- 1
- 程序员的自我修养
- 17
- 美国纽约摄影学院摄影教材(上)
- 2
- Win32多线程程序设计
- 8
- 竹林蹊径
- 4
- 鸟哥的Linux私房菜
- 4
- Linux/Unix设计思想
- 6
- 程序设计语言的形式语义
- 1
- Windows驱动开发技术详解
- 9
- 你必须知道的495个C语言问题
- 5
- Windows内核原理与实现
- 44
- PCI Express 体系结构导读
- 3
- 程序员的数学
- 5
- 深入浅出 MFC 第二版
- 2
- 并发的艺术
- 4
- 群和它的图象表示
- 1
- C语言接口与实现
- 1
- 致命元素
- 2
- 深入解析Windows操作系统
- 51
- Linux C编程一站式学习
- 13
- 淘宝技术这十年
- 1
- 高效程序的奥秘
- 1
- 花田半亩
- 1
- 于丹:重温最美古诗词
- 1
- 诛仙8(大结局)
- 1
- 深入理解计算机系统(原书第2版)
- 9
- C和指针
- 9
- 寒江独钓
- 5
- Windows程序设计
- 9
- 数据结构与算法分析
- 11
- 80X86汇编语言程序设计教程
- 3
- 琢石成器
- 30
- 数学分析教程
- 1
- 操作系统概念(第六版)
- 12
- 算法竞赛入门经典
- 10
- C++反汇编与逆向分析技术揭秘
- 12