shell脚本学习笔记 (一)
来源:互联网 发布:php 按行读取文件 编辑:程序博客网 时间:2024/04/30 08:04
一、位于第一行的#!
当一个文件中开头是#!时,内核会扫描改行的剩余部分,看是否存在可用来执行程序的解释器的完整路径,此外内核还会扫描是否有一个选项要传给解释器,内核会以指定的选项来引用解释器,在搭配命令行的其他部分。
例如:
有一个csh脚本,名为/usr/ucb/whizprog
它的第一行为#!/bin/csh -f,且/usr/ucb位于PATH中,
于是当用户输入whizprog -q /dev/tty01时,内核解释#!命令行后就会以如下方式引用csh:
/bin/csh -f /usr/ucb/whizprog -q /dev/tty01
在实际编写脚本时,脚本是否具有可移植性取决于是否有完整的路径名称。
在书写脚本时不使用任何选项,也可以在脚本后面添加" -" ,基于安全性的考虑,这可以避免某种程度上得欺骗是攻击。
例:
#! /bin/sh -
二、shell的基本元素
'-' 以及'--'表示选项
“;”用来分隔同一行里的多条命令
“&”使shell在后台执行其前面的命令。
shell识别的三种基本命令:内建命令、shell函数、外部命令。在这里重点描述一下shell的外部命令:
shell的外部命令就是指shell的副本所执行的命令,其基本过程如下:
a)建立一个新的进程,此进程为shell的一个副本;
b)在新进程中,在PATH指定的目录中,查找指定的命令。(如果命令名称里有"/"则忽略路径查找的步骤)
c)在新程序中,用查找到的命令替换原有的shell程序并执行
d)程序执行完以后,原有的shell继续执行读取下一行命令,执行上诉步骤。
变量:shell中变量的赋值方式为 变量名紧跟着“=”,然后是值,其中不能出现任何空格。当在shell想取变量值时,需要在前面加上$符号。
当需要将多个变量连接在一起的时候需要使用引号: fullname="$first $second $third"
echo和printf都可用于输出,printf的用法大体与C语言中类似除了一点:如果shell中调用printf时,参数比格式化声明多,则多出来的参数会循环依次的与格式化声明匹配,直到处理完所有的参数。
三、重定向和管道
< 输入重定向
> 输出重定向
>>附加到文件
| 管道
四、 tr命令
tr [option] source replac 将标准输入输出中德source字符 替换成replac ,其中source 和replac中的字符是逐个对应的,多出的字符不进行替换。
option:
-c, -C 替换的内容为不在source内的字符
-d 删除 source中字符
-s 若标准输入中 重复出现source中的某个字符,则将重复出现的字符替换为一个
五、特殊文件
/dev/null:位桶,所有写入的内容都会被丢弃,而读取它则会立刻返回文件结束描述符EOF
/dev/tty:程序会自动将它定位到一个终端,然后在与程序结合
stty 命令用于控制终端的各种设置
-echo 关闭自动打印输入字符的回显功能
+echo 打开自动打印输入字符的回显功能
六、位置参数
所谓位置参数即是指shell脚本的命令行参数。从1开始,当它超过9时应该用大括号把数字括起来。
例: $1 ${10}
七、简单的执行跟踪
将执行跟踪功能打开后,shell会显示每个执行的命令,并在前面加上“+”。
可以通过给PS4变量赋值改变shell的打印方式
执行时可以用:“sh -x shell脚本名称”的方式打开执行跟踪功能
也可以在shell脚本中 用“set -x” 打开执行跟踪功能 然后再用"set +x"关闭执行跟踪功能
八、LANG, LC_ALL
LANG变量用来设置locale的默认值
LC_ALL用来覆盖掉所有其他的LC_xxx变量
可以通过 locale -a 查看当前系统支持的所有locale
- shell脚本学习笔记 (一)
- shell 脚本学习笔记(一)
- Shell脚本学习笔记(一)
- Shell脚本学习笔记(一)
- shell脚本学习笔记一
- shell脚本学习笔记一
- 【Shell】【学习笔记】Linux Shell脚本应用(一)
- shell脚本笔记(一)
- shell脚本学习笔记(一)闹钟的源码
- linux Shell脚本学习笔记一(终端打印)
- Shell脚本学习笔记(一)--预备知识
- shell脚本编写学习笔记一
- shell脚本学习(一)
- shell脚本学习(一)
- shell脚本学习(一)
- linux shell脚本学习笔记一 脚本文件的构建
- Shell脚本学习一
- shell脚本学习《一》
- UNIX 屏幕导向程序的发展利器-curses
- (2011.11.26)03_折半插入排序.cpp
- OpenCV自带例子(四)改变一张图片的对比度与亮度
- RSA 加密算法
- 敏捷之旅——杭州站
- shell脚本学习笔记 (一)
- 杂想
- android读写Preference:
- JAVA读取硬件信息(MAC地址,CPU号,硬盘卷标,CPU型号及CPU使用率等信息)
- Sql Statement Turing part1
- 关于 oracle 多表关联更新的语句写法——仅仅是给自己看的
- 在Unix下用C编写curses程序的一些常用模块
- 快速排序
- [Java]读取文件方法大全