Linux Shell实例精讲学习笔记
- 格式:doc
- 大小:175.50 KB
- 文档页数:36
1.清除/var/log下的log的文件代码:cd /var/logCat /dev/null >messagesCat /dev/null >wtmpEcho "Logs cleaned up."2.清除:一个改良的清除脚本#!/bin/bash#一个Bash脚本的正确的开头部分#Cleanup 版本2LOG_DIR =/var/log#如果要使用变量,当然别把代码写死的好cd $LOG_DIRcat /dev/null>messagescat /dev/null>wtmpEcho "Logs cleaned up."exit #这个命令是一种正确并且合适的退出脚本的方法。
3.一个增强的和广义的删除的logfile的脚本#!/bin/bash#清除,版本3#Waring:LOG_DIR =/var/log#如果要使用变量,当然别把代码写死的好ROOT_UID=0 # $UID为0的时候,用户才具有的用户权限LINES=50 #默认的保存行数E_XCD=66 #不能修改目录?E_NOTROOT=67 #非根用户就以error退出#当然这里要使用根用户来运行if["$UID" -ne '"$ROOT_UID"]thenecho "Must be root to run this script."exit $E_NOTROOTfiif[-n "$1"]#测试是否有命令行参数(非空)thenlines = $1elselines =$LINES 默认,如果不在命令中指定ficd $LOG_DIRcat /dev/null>messagesE_WRONGARGS=65Case "$1" in"" ) lines=50;;*[!0-9]*) echo "Usage:`basename $0` file-to-cleanup";exit $E_WRONGARGS;;* ) lines=$1;;esaccd $LOG_DIRif[`pwd`!="$LOG_DIR"] 或if["$PWD"!="$LOG_DIR"]thenecho "Can`t chanage to $LOG_DIR"exit $E_XCDfi#在处理logfile之前,再确认一遍当前目录是否正确。
跟着360架构师学习Shell编程的笔记包含以下核心内容:1. Shell基础Shell简介:Shell是Linux/Unix系统中的一种命令行解释器,用于执行用户输入的命令。
Shell种类:Bash、Zsh等不同Shell的基本特性与区别。
基本语法:变量定义与引用、字符串操作、条件语句(if-else-fi)、循环结构(for, while, until)等。
2. 脚本编写创建和执行Shell脚本:如何创建一个基本的Shell脚本文件,赋予执行权限并运行。
输入输出重定向:使用等进行标准输入输出和错误输出的重定向。
文件测试操作:使用test命令或[ ]结构进行文件属性测试。
3. 函数与模块化函数定义与调用:在Shell中如何定义及调用函数以实现代码复用。
参数传递:了解Shell函数参数的使用方式,包括位置参数的区别。
4. 正则表达式Bash中的正则表达式支持:通过操作符结合模式匹配变量REPLY进行正则匹配。
grep、sed、awk工具:虽然不是Shell内置命令,但在处理文本时会广泛用到这些工具提供的正则功能。
5. 进阶技巧信号处理:捕获和处理SIGINT、SIGTERM等系统信号。
进程管理:使用&后台运行程序、wait等待子进程结束、jobs查看后台任务列表等。
脚本调试:使用set -x开启脚本执行跟踪、echo命令辅助调试等方法。
6. 实用案例日志分析与处理:利用Shell脚本对系统日志进行过滤、统计、归档等操作。
自动化运维:如自动备份、定时任务(Cron Job)、服务监控等场景下的Shell应用。
注意,以上内容仅为根据一般Shell编程课程可能会涵盖的知识点进行的推测性整理,并非360架构师的具体教学内容。
实际学习过程中,请参考具体的学习资料或课程内容。
【学习】LinuxShell脚本实例之⼀1.程序流程控制实例程序流程控制,实际上就是改变程序的执⾏顺序。
程序在执⾏过程中若流程被改变,就可能导致输出不同,因此利⽤这⼀特性就能够实现程序执⾏结果的控制。
程序流程控制可分为“选择”和“循环”这两类,在需要根据实际需求的不同实现不同的输出时,就可以改变程序的执⾏流程。
(1)for循环语句基于for语句的循环,基于继续执⾏循环或者结束循环的⽅式。
在for执⾏命令前,其会先检查所要执⾏的列表中所指定的值是否还有未使⽤的,若有未使⽤的就赋值并执⾏列表,直到列表中的值全部都使⽤过后才退出循环。
如下是⼀个简单的 for 控制语句的脚本程序,其使⽤“星期”作为变量名,并从列表中读取值,直到读取完成后退出。
我们执⾏⼀下说明:第03 ⾏,所定义的变量名为week,其值为Monday~ Sunday。
第05⾏,使⽤echo回显变量week的值。
(2)while循环语句while循环语句结构是⼀种执⾏⼀系列命令的语句结构,它所执⾏的命令由测试条件所决定,这些条件定义语句是否继续执⾏。
在 while 循环语句中执⾏命令,若条件为真,则将过程执⾏⼀遍并回到开始处,接着再次进⾏条件的判断,若条件仍然是真,则接着再执⾏⼀遍,直到条件为假时才退出循环。
如下是⼀个数值运算的while循环脚本,其实现的是数值相加运算。
执⾏⼀下看⼀下结果说明:第03和04⾏,声明x和sum都为整型变量并赋予初始值。
第05⾏,条件测试。
第06~09⾏,这是⼀个循环体,当执⾏遇到done后,跳到第06⾏处继续执⾏,直到条件不满⾜时退出循环。
第10⾏,输出总数值。
(3)until循环语句与for和while循环体⼀样,until循环也执⾏⼀系列的命令,直到条件满⾜后退出循环。
until循环在循环体的顶部继续判断条件,直到条件为真时结束循环,否则⼀直执⾏。
以下脚本使⽤until语句来实现⼀个简单的、不断循环的输出预设值,直到⼈为⼲预时结束循环(按Ctrl+C组合键退出)。
基础开始吧。
awk和expr,expr最常用。
expr是一款表达式计算工具,使用它能完成表达式的求值操作。
#!/bin/bashval=`expr2+2`File existsstr='this is a string'单引号字符串的限制:1)单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;2)单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号:your_name='qinjx'str="Hello,I know your are\"$your_name\"!\n"双引号的优点:1、双引号里可以有变量2、双引号里可以出现转义字符拼接字符串:your_name="qinjx"greeting="hello,"$your_name"!"greeting_1="hello,${your_name}!"echo$greeting$greeting_1获取字符串长度:string="abcd"echo${#string}#输出4提取子字符串:string="alibaba is a great company"echo${string:1:4}#输出liba查找子字符串:string="alibaba is a great company"echo`expr index"$string"is`定义数组:在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。
定义数组的一般形式为:array_name=(value1...valuen)array_name=(value0value1value2value3)读取数组元素值的一般格式是:${array_name[index]}例如:valuen=${array_name[2]}使用@或*可以获取数组中的所有元素,例如:${array_name[*]}${array_name[@]}获取数组的长度:获取数组长度的方法与获取字符串长度的方法相同,例如:#取得数组元素的个数length=${#array_name[@]}#或者length=${#array_name[*]}#取得数组单个元素的长度lengthn=${#array_name[n]}11、echo命令显示转义字符:echo"\"It is a test\""结果将是:"It is a test"显示结果重定向至文件:echo"It is a test">myfile原样输出字符串:若需要原样输出字符串(不进行转义),请使用单引号。
Linux学习笔记⼀(⽂件和⽬录操作)1.基本shell操作命令解析器--根据命令的名字,调⽤对应的可执⾏程序shell--unix操作系统bash--Linux操作系统(⽂件系统)Linux⽂件系统的存储单元是块在磁盘上存储的时候每个⽂件都有⼀个inode--i节点,保存了⼀些⽂件信息,通过iNode找到对应的⽂件a.快捷键b.虚拟终端history--查询命令的历史记录ctrl+p == 向上的箭头,查询上⼀个命令ctrl+n == 向下的箭头,查询下⼀个命令ctrl+b 向左移动backctrl+f 向右移动forwardctrl+a 移动到⾏⾸ctrl+e 移动到⾏尾ctrl+h 刪除光标前⾯的字符ctrl+d 刪除光标覆盖的字符ctrl+u 刪除光标前⾯的所有字符ctrl+k 删除光标位置到⾏尾的字符ctrl+l或者clear命令清理屏幕c.命令和路径补齐tab智能提⽰键,按⼀次没反应说明有很多符合条件的命令,再按⼀次出现符合条件的命令列表cd ⽬录 + 连续两次tab,显⽰⽬录下⼀级的所有路径d.centos7防⽕墙操作systemctl start firewalld.service 启动systemctl enable firewalld.service 开机启动systemctl stop firewalld.service 停⽌systemctl disable firewalld.service 禁⽌开机启动systemctl status firewalld.service 查看状态firewall-cmd --state 查看状态2.Linux系统⽬录结构ls 路径(查询当前路径下的所有⽂件)/根⽬录下的⽬录说明:/bin bin是binary的缩写,这个⽬录存放着经常使⽤的命令可执⾏程序/boot 存放的是启动Linux时的⼀些核⼼⽂件,包括⼀些连接⽂件以及镜像⽂件(开机启动项)/dev 是Device(设备)的缩写,该⽬录存放的是Linux的外部设备,在Linux中访问设备的⽅式和访问⽂件的⽅式是相同的(Linux奉⾏⼀切皆⽂件,它会把所有硬件外设抽象成设备⽂件存到dev⽬录之下,⽐如⿏标键盘)/etc ⽤来存放所有系统管理所需要的配置⽂件和⼦⽬录/home ⽤户的主⽬录,在Linux中,每个⽤户都有⼀个⾃⼰的⽬录,⼀般该⽬录名是以⽤户的账号命名。
shell学习笔记什么是shell? rhat 9下都有什么shell? 可以和内核举行通信的惟独三种类型的程序:shell kde/gnome apliion,shell是说明器,redhat9下都有shell: bash、ash、tsh等什么是shell脚本?shell 脚本要运行,需要什么条件?shell脚本都有什么语法和规章?假如学学习过dos下的批处理指令的话就会对shel十分的认识,shell 脚本就是指令的集合,但又一些扩展的东西,比如加入了编程语言种的跳转、循环、条件推断等,shell种的变量不需要定义就可以挺直用法哪个。
shell中的变量? shell的变量在申明的是偶就可以挺直的用法,定义的合适为:变量名=变量值,假如变量值中浮现空格,可以将变量值用引号括起来,应用: $(变量名),shell中的特别变量:$ 脚本传递的参数个数,$* 显示脚本传递的全部参数 $$ 脚本运行的当前p号,$? 显示最后推出的状态 0为正确 1为发生错误,$1 : 引用传递的参数。
shell中的变量可以定义类型,可以用法declare 指令格式为:declare[-afirx]变量名 -a 定义为数组 -f 定义为函数 -i 定义为整数 -r 定义为只读 -x 定义为透过环境的输出变量,从键盘读取参数可以采纳: read 变量名关于shell学习中的变量测试:条件测试又两种方式: test condition [ conditon ] 需要主要的是[],方括号的两边各加一个空格,测试文件状态: -e 是否存在 -d 是否为名目 -f 是否文件存在 -L 是否为文件衔接符 -s 文件非空 -r是否可读 -w是否可写 -x是否可执行 [ -e /dir ] echo itst ,这里要注重的是规律衔接符,它的意思是假如前边的条件测试成立,然后才执行后边的指令,假如不成立,则不执行后边的指令。
字符串测试指令:测试格式为: test s operate str ; teststr_operate str [ str_operate str ] [ str operate str ] 其中的stroperate operate 可以为: = 两个字符串相等!= 两个字符串不相等 -z 字符串为空 -n 字符串非空数值的第1页共2页。
linux shell详解Linux Shell 是一种运行在 Linux 操作系统上的命令行解释器,它提供了一种与系统进行交互的方式。
本文将详细介绍Linux Shell 的相关知识,包括 Shell 的基本概念、常用命令以及一些实用技巧。
## 一、Shell 的基本概念Shell 是用户与操作系统内核之间的接口,它接收用户输入的命令,并将其转发给内核执行。
在Linux 中,常见的Shell 有Bash (Bourne Again Shell)、Csh(C Shell)等。
Bash 是最常用的Shell,也是默认的 Shell。
Shell 的主要功能包括命令解析与执行、环境控制、脚本编程等。
用户可以通过Shell 提供的命令来执行文件操作、进程管理、权限控制等操作。
## 二、常用 Shell 命令1. 目录操作命令:- `ls`:列出当前目录下的文件和子目录。
- `cd`:切换当前工作目录。
- `pwd`:显示当前工作目录的路径。
2. 文件操作命令:- `cp`:复制文件或目录。
- `mv`:移动文件或目录。
- `rm`:删除文件或目录。
- `cat`:查看文件内容。
3. 进程管理命令:- `ps`:显示当前正在运行的进程。
- `top`:实时显示进程状态。
- `kill`:终止指定进程。
4. 网络命令:- `ping`:测试与指定主机的连通性。
- `ifconfig`:查看和配置网络接口信息。
- `ssh`:远程登录到其他主机。
5. 权限管理命令:- `chmod`:修改文件或目录的权限。
- `chown`:修改文件或目录的所有者。
- `chgrp`:修改文件或目录的所属组。
## 三、Shell 脚本编程Shell 脚本是一种可以用来编写一系列命令的脚本文件,它可以实现自动化任务的目的。
Shell 脚本通常以 `.sh` 作为文件后缀名。
以下是一个简单的Shell 脚本示例,用于统计指定目录下文件的数量:```shell#!/bin/bashdir_path="/path/to/directory"file_count=0# 遍历目录下的文件for file in $(ls $dir_path)doif [ -f $dir_path/$file ]; then((file_count++))fidoneecho "文件数量:$file_count"```以上脚本中,使用了 `for` 循环遍历目录下的文件,并通过判断是否是普通文件来统计文件数量。
RHCE课程-初级部分4、shell及环境变量简介Kernel系统内核用于在计算机启动时载入基本内存、管理基本输入输出、管理进程初始化和进程的调度。
Shell系统的命令解释器,翻译成中文也就叫壳,外壳的意思,就是最表面的,用于操作系统与用户的通信,相当于Dos中的。
Red Hat Linux 默认的shell 是Bash !Shell与系统及子进程的层次关系+ - - - - - - - - - - - - - - - - -- - - - - - - - +| 用户进程|| + - - - - - - - - - - - - - - - - - - - - - -+ || | shell | || | + - - - - - - - - - - - - - - - - - - -+ | || | | Kernel | | || | | + - - - - - - - - - - - - -- - - -+ | | || | | | Hardware | | | || | | + - - - - - - - - - --- - - - - -+ | | || | + - - - - - - - - - - - - - - - - - - - + | || + - - - - - - - - - - -- - - - - - - -- - - - - + |+ - - - - - - - - - - -- - - -- - - - - - - - - - - -+ 真正工作的是硬件。
kernel(内核)就是控制硬件的,但是怎么让内核知道我们想要硬件做什么工作呢?那就需要shell, 在Unix系统中有各种Shell,Linux采用bash为其默认shell。
B ash是GNU计划的一个组件,与Unix上的Bourne Shell完全兼容。
支持命令行输入、操作历史查询、快捷键、使用变量等功能们都需要X来运行。
(这些往往是经常用到,但是各种网络上的材料都语焉不详的东西,个人认为比较有用)七种文件类型d 目录l 符号链接s 套接字文件 b 块设备文件c 字符设备文件p 命名管道文件- 普通文件正则表达式从一个文件或命令输出中抽取或过滤文本时。
可使用正则表达式(RE),正则表达式是一些特殊或不很特殊的字符串模式的集合。
基本的元字符集:^ 只匹配行首。
$ 只匹配行尾。
* 一个单字符后紧跟*,匹配0个或多个此单字符。
[] 匹配[]内字符,可以是一个单字符,也可以是字符序列。
可以使用-来表示[]内范围,如[1-5]等价于[1,2,3,4,5]。
\ 屏蔽一个元字符的特殊含义,如\$表示字符$,而不表示匹配行尾。
. 匹配任意单字符。
pattern\{n\} 匹配pattern出现的次数npattern\{n,\}m匹配pattern出现的次数,但表示次数最少为npattern\{n,m\} 匹配pattern出现的次数在n与m之间(n,m为0-255)几个常见的例子:显示可执行的文件:ls –l | grep …x...x..x只显示文件夹:ls –l | grep ^d匹配所有的空行:^$匹配所有的单词:[A-Z a-z]*匹配任一非字母型字符:[^A-Z a-z]包含八个字符的行:^……..$(8个.)字符类描述以下是可用字符类的相当完整的列表:[:alnum:] 字母数字[a-z A-Z 0-9][:alpha:] 字母[a-z A-Z][:blank:] 空格或制表键[:cntrl:] 任何控制字符[:digit:] 数字[0-9][:graph:] 任何可视字符(无空格)[:lower:] 小写[a-z][:print:] 非控制字符[:punct:] 标点字符[:space:] 空格[:upper:] 大写[A-Z][:xdigit:] 十六进制数字[0-9 a-f A-F]尽可能使用字符类是很有利的,因为它们可以更好地适应非英语locale(包括某些必需的重音字符等等).shell的引号类型shell共有四种引用类型:“”双引号‘’单引号` ` 反引号\ 反斜线l “”可引用除$、` 、\ 、外的任意字符或字符串,“”中的变量能够正常显示变量值。
Linuxshell脚本输出⽇志笔记整理(必看篇)1、⽇志⽅法简介:#⽇志名称log="./upgrade.log" #操作⽇志存放路径fsize=2000000 #如果⽇志⼤⼩超过上限,则保存旧⽇志,重新⽣成⽇志⽂件exec 2>>$log #如果执⾏过程中有错误信息均输出到⽇志⽂件中#⽇志函数#参数#参数⼀,级别,INFO ,WARN,ERROR#参数⼆,内容#返回值function zc_log(){#判断格式if [ 2 -gt $# ]thenecho "parameter not right in zc_log function" ;return ;fiif [ -e "$log" ]thentouch $logfi#当前时间local curtime;curtime=`date +"%Y%m%d%H%M%S"`#判断⽂件⼤⼩local cursize ;cursize=`cat $log | wc -c` ;if [ $fsize -lt $cursize ]thenmv $log $curtime".out"touch $log ;fi#写⼊⽂件echo "$curtime $*" >> $log;}2、使⽤举例shell脚本内容:#! /bin/bash#数据库变量localpasswd=xxxxmysqlhost=xxxxmysqluser=xxxxmysqlpasswd=xxxx#⽇志名称log="./upgrade.log" #操作⽇志存放路径fsize=2000000exec 2>>$log #如果执⾏过程中有错误信息均输出到⽇志⽂件中#⽇志函数#参数#参数⼀,级别,INFO ,WARN,ERROR#参数⼆,内容#返回值function zc_log(){#判断格式if [ 2 -gt $# ]thenecho "parameter not right in zc_log function" ;return ;fiif [ -e "$log" ]thentouch $logfi#当前时间local curtime;curtime=`date +"%Y%m%d%H%M%S"`#判断⽂件⼤⼩local cursize ;cursize=`cat $log | wc -c` ;if [ $fsize -lt $cursize ]thenmv $log $curtime".out"touch $log ;fi#写⼊⽂件echo "$curtime $*" >> $log;}echo "start update shell" ;mysql -h$sqlip -u$sqluser -p$sqlpasswd -e "use $db;set names gbk;---- 表的结构 msgm_qdjyly--DROP TABLE IF EXISTS msgm_qdjyly;CREATE TABLE IF NOT EXISTS msgm_qdjyly (jylyid int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',jylb varchar(20) DEFAULT NULL COMMENT '交易类别',jylbmc varchar(50) DEFAULT NULL COMMENT '交易类别名称',jgm varchar(10) NOT NULL COMMENT '机构码',lyfs int(11) NOT NULL COMMENT '路由⽅式,1指定渠道,2按卡bin渠道',qdbh varchar(20) DEFAULT NULL COMMENT '渠道编号',qdmc varchar(50) DEFAULT NULL COMMENT '渠道名称',zt int(11) NOT NULL DEFAULT '1' COMMENT '状态,1正常,2关闭',bz varchar(100) DEFAULT NULL COMMENT '备注',PRIMARY KEY (jylyid)) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='交易路由信息' AUTO_INCREMENT=7 ;zc_log INFO "执⾏ CREATE TABLE msgm_qdjyly 命令的结果为: $? " ;echo "执⾏ CREATE TABLE msgm_qdjyly 命令的结果为: $? " ;以上这篇Linux shell脚本输出⽇志笔记整理(必看篇)就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
第一章:shell基础 ●umask --查看当前用户创建文件或文件夹时的默认权限
eg: [test@szbirdora 1]$umask
0002 [test@szbirdora 1]$ls -lh -rw-rw-r-- test test myfile drwxrwxr-x test test 1 上面的例子中我们看到由test默认创建的文件myfile和文件夹1的权限分别为664,775.而通过umask查到的默认权限为002.所以可以推断出umask的计算算法为: umask file directory 0 6 7 1 5 6 2 4 5 3 3 4 4 2 3 5 1 2 6 0 1 7 0 0
●连接ln 硬连接 ln sourcefile targetfile 连接后的target文件大小和source文件一样 软连接 ln -s sourcefile targetfile 类似于windows的快捷方式
●shell script 基本结构 #!/bin/bash --------bash shell开头必须部分 # description --------注释部分(可有可无,为了阅读方便最好加以说明) variable name=value ---------变量部分,声明变量,赋值 control segment ---------流程控制结构,如判断、循环、顺序 eg. helloworld.sh #! /bin/bash # This is a helloworld shell script printchar = "hello world" echo $printchar
[test@szbirdora 1]$sh helloworld.sh hello world
●shell 特性 ①别名 alias eg. alias ll = “ls -l” ②管道 a |b 将a命令的输出作为b命令的输入 eg. ls |sort 将ls列举的项排序 ③命令替换 a `b` 将b命令的输出作为a命令的输入 eg. ls `cat myfile` 列举出cat myfile的输出项 ④后台运行 nohup command& 可通过jobs -l查看后台运行的脚本 ⑤重定向 >,< 可以改变程序运行的输出来源和输入来源 ⑥变量 可以用$varname 来调用变量 ⑦特殊字符 `用来替换命令 \用来使shell无法认出其后的特殊字符,使其失去特殊含义 ;允许一行放多个命令 () 创建成组的命令 ?? {} 创建命令块 ??
第二章:变量和运算符 ●本地变量:在用户现在的shell生命期的脚本中使用。设置变量:various_name=value.可用set 来查看。用readonly可以使变量只读。 ●环境变量:用于当前用户下所有用户进程(不限于现在的shell)。 设置变量:export various_name=value。用env查看。 用readonly可以使变量只读。 ●变量替换 echo ${variable name} 显示实际值到variable name echo ${variable name:+value} 如果设置了variable name,则显示其值,否则为空 echo ${variable name:?value} 如果未设置variable name,则显现用户定义错误信息value echo ${variable name:-value} 如果未设置,则显示其值 echo ${variable name:=value} 如果未设置,则设置其值,并显示 ●清除变量 unset variable name ●位置变量 位置变量表示$0,$1,$2...$9 $0 ----脚本名字 $1 ----根据参数位置表示参数1 eg. #! /bin/bash #parm.sh echo "This is script name : $0" echo "This is parameter 1: $1" echo "This is parameter 2: $2" [test@szbirdora 1]$sh parm.sh a b This is script name : parm.sh This is parameter 1: a This is parameter 2: b ●向系统中传递位置变量
#!/bin/bash #parm.sh find /u01/test/1 -name $1 -print [test@szbirdora 1]$ sh parm.sh myfile /u01/test/1/myfile ●标准变量 bash默认建立了一些标准环境变量,可在/etc/
profile中定义 EXINIT HOME IFS LOGNAME --当前登录用户名 MAIL MAILPATH PATH TERM --终端信息 TZ --时区 PS1 --登录提示,如[test@szbirdora 1]$ [test@szbirdora 1]$ echo $PS1 [\u@\h \W]\$ --\u -user --\h -host --\W -document PS2 --一命令多行,换行提示,如> PWD --当前目录 MAILCHECK --每隔多少秒检查是否有新邮件 [test@szbirdora 1]$ echo $MAILCHECK 60 SHELL MANPATH --帮助文档位置 TERMINFO --终端信息 ●特殊变量
$# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的进程ID号 $@ 传递到脚本的参数列表,并在引号中返回每个参数 $- 显示shell使用的当前选项,与set命令功能相同 $? 显示最后命令的退出状态,0表示没有错误,其他表示有错误 eg. #!/bin/bash #parm echo "this is shellname: $0" echo "this is parm1 : $1" echo "this is parm2 : $2" echo "show parm number : $#" echo "show parm list : $*" echo "show process id: $$" echo "show precomm stat: $?" [test@szbirdora 1]$ sh parm.sh a b this is shellname: parm.sh this is parm1 : a this is parm2 : b show parm number : 2 show parm list : a b show process id: 24544 show precomm stat: 0 ●影响变量的命令
declare 设置或显示变量 -f 只显示函数名 -r 创建只读变量 -x 创建转出变量 -i 创建整数变量 使用+替代-,可以颠倒选项的含义 export -p 显示全部全局变量
shift[n] 移动位置变量,调整位置变量,使$3赋予$2,使$2赋予$1 n 前移n typeset 和declare同义
注意:双引号不能解析$,\,`三个字符,所以在双引号中可以引用变量、转义字符、替换变量 单引号可以解析,所以单引号中引用变量等无效 [test@szbirdora 1]$ echo "$test" test [test@szbirdora 1]$ echo '$test' $test
●运算符类型 ⒈按位运算符 ~ 取反 << 左移运算符 >> 右移运算符 & 与 | 或 ^ 异或 $[ ] 表示形式告诉shell对方括号中表达式求值 $[a+b] 2.逻辑运算符 && || >,<,=,!= 3.赋值运算符 let variablename1 +=variablename1+ varablename2
1.echo echo [option] string -e 解析转移字符
-n 回车不换行,linux系统默认回车换行 转移字符 \c \t \f \n #!/bin/bash #echo echo -e "this echo's 3 newlne\n\n\n" echo "OK" echo echo "this is echo's 3 ewline\n\n\n" echo "this log file have all been done">mylogfile.txt [test@szbirdora ~]$ sh echod.sh this echo's 3 newlne
OK this is echo's 3 ewline\n\n\n 上面可以看到有-e则可以解析转移字符,没有不能解析。echo空输出为空
2.read 可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量 read variable1 variable2 eg. #!/bin/bash #readname echo -n "first name:" read firstname echo -n "last name:" read lastname echo "this name is $firstname $lastname"
3.cat 显示文件的内容,创建内容,还可以显示控制字符 cat [options]filename1 filename2 -v 显示控制字符(Windows文件) cat命令不会分页显示,要分页可以采用more、less