linux基础学习8
script 的功能;
zhenxiang@ubuntu:~$ var=$((+))
zhenxiang@ubuntu:~$ echo $var
[root@www scripts]# echo $firstname $lastname
<==确认了,这两个发量并不存在喔!
[root@www scripts]# sh sh02.sh <==传两个变量到脚本中
Please input your first name: VB <==这个名字是自己输
Please input your last name: Tsai
Your full name is: VB Tsai <==在 script 运作中,这两个发数有生效
[root@www scripts]# echo $firstname $lastname
<==事实上,这两个变量在父程序的 bash 中还是不存在的
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "PID: $$"
echo "Total Number of Parameters : $#"
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
PID:
Total Number of Parameters :
[root@www ~]# test -e /dmtsai && echo "exist" || echo "Not exist"
Not exist <==结果显示不存在啊!
例子: $HOME 是否为空
[root@www ~]# [ -z "$HOME" ] ; echo $?
[root@www ~]# name="VBird Tsai"
[root@www ~]# [ $name == "VBird" ]
bash: [: too many arguments
输入在终端显示
echo $Passwd
限时输入,否则退出
read -p "Input a number:" -t 5 Number
读取限定字符
read -p "Input a word:" -n 5 Word
#!/bin/bash
# Program:
# Program shows the effect of shift function.
# History:
# 2009/02/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
shift # 进行第一次『一个变量的 shift 』
echo "Total parameter number is ==> $#"
如例子:tt.sh
#!/bin/bash
function printit() {
echo "this is printit \$1:$1"
}
printit
echo "this is shell \$1:$1" [root@www scripts]# ./tt.sh
this is printit $:
this is shell $: <==两者是不一样的噢;
do
[root@www ~]# sh [-nvx] scripts.sh
选项与参数:
-n :不要执行 script,仅查询语法的问题;
-v :再执行 sccript 前,先将 scripts 的内容输出到屏幕上;
-x :将使用到的 script 内容显示到屏幕上,这是很有用的参数!

.png)
[root@www ~]# grep -n '^the' regular_express.txt
:the symbol '*' is represented as start.
#行首是the开头的,注意与通配符[^]区别很大噢,根本不是一个东西
#这个$自然就是攫取行尾咯
[root@www ~]# grep -n '\.$' regular_express.txt
#小数点有其他意思则需要 转意字符去,而$是放在行尾的啦;
[root@www ~]# grep -n '^$' regular_express.txt
#只有行首和行尾当然就是空白行了
例子:找出g??d的字符串
[root@www ~]# grep -n 'g..d' regular_express.txt
例子:找出g开头与g结尾的字符串当中可有可无
是g*g吗?当然不是;g* 代表0个g或者一个以上的g 这个要重点理解一下;
[root@www ~]# grep -n 'g.*g' regular_express.txt
# .* 就代表零个或多个任意字符
[root@www ~]# grep -n '[0-9][0-9]*' regular_express.txt
:However, this dress is about $ dollars.
:You are the best is mean you are the no. .
#虽然可以使用 grep -n '[0-9]' regular_express.txt 但,使用上面可以更好的理解#的作用
[root@www ~]# grep -n 'o\{2\}' regular_express.txt
:"Open Source" is a good mechanism to develop programs.
:apple is my favorite food.
:goooooogle yes!
例子:找到两到五个O的字符串
[root@www ~]# grep -n 'go\{2,5\}g' regular_express.txt
:google is the best tools for search keyword.
例子:找到两个以上O的字符串
[root@www ~]# grep -n 'go\{2,\}g' regular_express.txt
选项与参数:
[root@www ~]# nl /etc/passwd | sed '2,5d'
root:x:::root:/root:/bin/bash
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
[root@www ~]# nl /etc/passwd | sed '2a drink tea'
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
drink tea
daemon:x:::daemon:/sbin:/sbin/nologin
如果要在第二行前增加 则将 参数a改成参数i
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
root:x:::root:/root:/bin/bash
No - number
sync:x:::sync:/sbin:/bin/sync
[root@www ~]# sed -i '$a # This is a test' regular_express.txt
# 由于$代表的是最后一行,而 a 的动作是新增,因此该档案最后新增啰
grep -v ‘^$’regular.txt | grep -v '^#'
需要使用到两次管道命令来搜寻;那么如果使用延伸型只需要一次:
egrep -v '^$|^#' regular.txt
.png)
\b 退格键(backspace)
\f 清除屏幕 (form feed)
%ni 那个 n 是数字, i 代表 integer ,亦卲多少整数字数;
[root@www ~]# last -n <==仅列出前五行
root pts/ 192.168.1.100 Tue Feb : still logged in
root pts/ 192.168.1.100 Tue Feb : - : (:)
root pts/ 192.168.1.100 Mon Feb : - : (:)
dmtsai pts/ 192.168.1.100 Mon Feb : - : (:)
只想要第一和第三字段
[root@www ~]# last -n | awk '{print $1 "\t" $3}'
root 192.168.1.100
root 192.168.1.100
root 192.168.1.100
dmtsai 192.168.1.100
[root@www ~]# last -n | awk '{print $1 "\t lines: " NR "\t columes: " NF}'
root lines: columes:
root lines: columes:
root lines: columes:
dmtsai lines: columes:
root lines: columes:
在 /etc/passwd 当中是以冒号 ":" 来作为字段的分隔
查阅第三栏小于 以下的数据,并且仅列出账号与第三栏
[root@www ~]# cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t " $3}'
root:x:::root:/root:/bin/bash
bin
daemon
....(以下省略)....
bin 1
daemon 2
[root@www test]# cp /etc/passwd passwd.old
[root@www test]# cat /etc/passwd | \
- 管理主机每天任务
- 查询登录档
- 追踪流量
- 监控用户使用主机状态
- 主机各项硬件设备状态
- 主机软件更新查询
- 其他使用者要求
- 脚本规范
- script 的功能
- script 的版本信息
- script 的作者与联系方式
- shell特殊变量
- $0:脚本的文件名
- $n:传递给脚本的参数。n是一个数字,表示第一个参数。
- $#:参数的个数
- $*:参数列表
- $@:参数列表;被双引号包含时,与$*不同
- $?:上一个命令的退出状态
- $$:当前脚本的进程ID
- $* 和 $@ 的区别
- $* 和 $@ 都表示传递参数列表
- 不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
- 当它们被双引号(" ")包含时,
- "$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;
- "$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
- 文件测试
- -e 该『档名』是否存在
- -f 该『档名』是否存在且为档案(file)
- -d 该『文件名』是否存在且为目录(directory)
- 中括号测试注意点
- 在中括号 [] 内的每个组件都需要有空格键来分隔;
- 在中括号内的变数,最好都以双引号括号起来;
- 在中括号内的常数,最好都以单或双引号括号起来。
- read
- 限时输入
- read -p "Input a number:" -t 5 Number
- 从输入中取5个字符
- read -p "Input a word:" -n 5 Word
- 等待输出q退出
- read -d q -p "Input some words end with q:" word
- 限时输入
- shift
- 变量剔除替换
- 变量1用完之后,将变量1剔除,原先的变量2,变成变量1;
- 默认步长是1,shift 2,则步长是2;踢掉两个;
- 条件判断式语法,for的两种写法,case语法,while的两种写法
- function
- function中特殊字符与shell中的特殊字符是相互独立的。
- shell script 的debug
- bash -nx scripts.sh
- n,不执行,仅检测语法问题
- x,将使用的script内容显示屏幕
- bash -nx scripts.sh
- 正则表达式
- 常用特殊字符
- [:alnum:],代表0-9;A-Z;a-z
- [:alpha:],代表A-Z;a-z
- [:upper:],代表A-Z
- [:lower:],代表a-z
- [:digit:], 代表0-9
- 行首与行尾
- ^ $
- 找空白行
- grep -n '^$' regular_express.text
- 任意一个字符 .
- 重复次数
- * ,0次或无限次
- +,1次或无限次
- ?, 0次或1次
- 连续RE字符范围{}
- 连续两个O
- grep -n 'o\{2\}' regular_express.txt
- 连续2到5个
- grep -n 'go\{2,5\}g' regular_express.txt
- 2个以上
- grep -n 'go\{2,\}g' regular_express.txt
- 连续两个O
- 常用特殊字符
- grep 进阶
- -A,-B,-C n ;除匹配行之外,前,后再显示n行
- A,after;B,before;C,是前后都显示
- -n,带上行号显示
- -v,反向选择
- -i, 忽略大小写
- -A,-B,-C n ;除匹配行之外,前,后再显示n行
- sed
- 将数据读入模式空间中,和模式条件做匹配;符合模式条件,则在模式空间中使用后面的编辑命令对其完成编辑,并且将编辑结果输出到屏幕;并且在结束后,默认将模式空间的内容,打印出来。
- 默认不编辑源文件,仅对模式空间上的数据做处理;
- 逐行处理
- awk
- 将数据分成几个字段来处理
- 以行为一次处理的单位,而以字段为最小的处理单位
- diff
- 档案对比工具
- 用在比对两个档案之间的差异,以行为单位来对比
linux基础学习8的更多相关文章
- linux基础学习之软件安装以及常用命令
linux基础学习之软件安装以及常用命令 调用中央仓库: yum install wget 然后下载nodejs: wget https://nodejs.org/dist/v10.14.2/node ...
- Linux基础学习系列目录导航
Linux基础学习-通过VM安装RHEL7.4 Linux基础学习-命令行与图形界面切换 Linux基础学习-基本命令 Linux基础学习-RHEL7.4之YUM更换CentOS源 Linux基础学习 ...
- linux基础学习路线&review
linux基础学习网址: https://www.runoob.com/linux/linux-tutorial.html 比较重点的是这个启动过程的介绍学习:https://www.runoob.c ...
- Linux 基础学习1
目录 Linux 基础学习 用户登录 终端 交互式接口 bash 修改ssh连接慢的步骤 命令提示符 显示提示符格式 命令 别名 命令格式 获取命令的帮助信息 man bash 快捷键 tab 键 引 ...
- Linux 基础学习2
目录 Linux 基础学习2 文件目录结构 文件命名规范 文件系统结构 linux应用程序的组成 绝对路径和相对路径 目录名和基名 切换目录 切换到家目录 切换到上一次的目录 显示当前的工作目录 列出 ...
- Linux基础学习(全)
使用的Linux发行版本为Redhat 1.Linux(RedHat)基础学习-命令行使用入门 2.Linux(RedHat)基础学习-文件寻址与管理 3.Linux(RadHat)基础学习-vim编 ...
- Linux基础学习(1)--Linux系统简介
第一章——Linux系统简介 1.UNIX和Linux发展史: 1.1 unix发展史: (1)1965年,美国麻省理工学院(MIT).通用电气公司(GE)及AT&T的贝尔实验室联合开发Mul ...
- Linux 基础学习(第二节)
free命令用于显示当前系统中内存的使用量信息,格式为:“free [-h]”. 为了保证Linux系统不会突然卡住宕机,因此内存使用量应该是运维人员时刻要关注的数据啦,咱们可以使用-h参数来以更人性 ...
- Linux基础学习(二)
前言: 我们在上一节了解了一下linux的硬件组成,虽然也许对具体的东西还不甚了解,但是我们知道了linux下一切皆文件这一特性 我们装好了CentOS7的虚拟机(这个可以看别人教程来装起来,比较简单 ...
- Linux基础学习(一)
前言:这个学习笔记是为了督促自己能够更好的学习Linux的有关知识. 参考书目 鸟哥的linux私房菜 Chapter 1:入门建议 新手建议:重点 基础一定一定要学好 那么什么是基础呢? 先从Lin ...
随机推荐
- NOI p 2017 TG游记
嗨小朋友们大家好 还记得我是谁吗 对了我就是为iot配音的演员 弹鸡鸡 今天呐我特别的要向长沙市的oier们 洛谷的oier们 还有cnblogs的oier们问声好 为什么呢 因为我们在2017年11 ...
- linux环境搭建系列之svn安装
前提: linux centOS 64位操作系统 1.root账号 2.#yum install -y subversion 出现如下报错: 尝试Telnet https://www.baidu.co ...
- 04 JVM是如何执行方法调用的(下)
虚方法调用 Java 里所有非私有实例方法调用都会被编译成 invokevirtual 指令,而接口方法调用会被编译成 invokeinterface 指令.这两种指令,均属于 Java 虚拟机中的虚 ...
- python 令人抓狂的编码问题
#运行以下程序: #! /usr/bin/env python#coding=utf-8 file = open( 'all_hanzi.txt','wb' ) listhz = []n=0for c ...
- SQLAlchemy 学习笔记(三):ORM 中的关系构建
个人笔记,不保证正确. 关系构建:ForeignKey 与 relationship 关系构建的重点,在于搞清楚这两个函数的用法.ForeignKey 的用法已经在 SQL表达式语言 - 表定义中的约 ...
- ORA-12012: 自动执行作业 "SYS"."ORA$AT_OS_OPT_SY_21" 出错
oracle 12.2.0.1版本报错: Errors in file /u01/app/oracle/diag/rdbms/easdb/easdb2/trace/easdb2_j000_27520. ...
- ReentrantLock学习笔记
参考:https://www.jianshu.com/p/4358b1466ec9 前言: 先来想象一个场景:手把手的进行锁获取和释放,先获得锁A,然后再获取锁B,当获取锁B后释放锁A同时获取锁C,当 ...
- Proteus中常用元器件名字
运放 OPAMP 稳压管 zener MOS管 IRC 串口 COMPIM
- ZOJ 2112 Dynamic Rankings(带修改的区间第K大,分块+二分搜索+二分答案)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- [URAL1519] Formula 1 [插头dp入门]
题面: 传送门 思路: 插头dp基础教程 先理解一下题意:实际上就是要你求这个棋盘中的哈密顿回路个数,障碍不能走 看到这个数据范围,还有回路处理,就想到使用插头dp来做了 观察一下发现,这道题因为都是 ...