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 ...
随机推荐
- vue-router2.0组件复用
在使用vue-router1.x时我们知道对于路由 a/b/c 和 a/b/d , 组件a和组件b将会复用 .具体可以参考:https://github.com/vuejs/vue-router ...
- Autofac Mvc5 Nuget
Autofac 3.5.2 Install-Package Autofac -Version 3.5.2 Autofac ASP.NET MVC 5 Integration 3.3.3 Install ...
- 安卓手机关闭底部键盘灯的方法(htc G11亲测有效)
还在因为看电子书和看电影时键盘灯刺眼而苦恼吗?下面提供一个方法关闭键盘灯,让你轻松DIY! 1、手机必须先Root。使用RE管理器,按照这个路径,找到文件:brightness sys/devices ...
- C#入门篇6-4:字符串操作 string分割字符串效率比较
//分割字符串效率比较 public static void Fund() { //1.用string.Split方法 //a.字节数组: //625毫秒/百万次 string str1 = &quo ...
- leetcode 【 Unique Paths II 】 python 实现
题目: Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. H ...
- mongo命令
安装mongo http://docs.mongodb.org/master/tutorial/install-mongodb-on-redhat-centos-or-fedora-linux/ 启动 ...
- [oldboy-django][5python基础][内置方法]dir 如何查看一个对象有哪些方法
f = open('/etc/password', 'r') print(dir(f))
- HDU3018 几笔画(非1笔)
Ant Trip Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 【bzoj2280】[Poi2011]Plot 二分+倍增+二分+最小圆覆盖
题目描述 给出一系列点p_1, p_2, ... , p_n,将其分成不多余m个连续的段,第i段内求一个点q_i,使得q_i到这段内点的距离的最大值的最大值最小 输入 第一行,n m下面n行,每行两个 ...
- linux系统——hosts文件修改
1. 关于/etc/host,主机名和IP配置文件 Hosts - The static table lookup for host name(主机名查询静态表) Linux 的/etc/hosts是 ...