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 ...
随机推荐
- This application has request the Runtime to terminate it in an unusual way.
Q: CertsMV.exe gui popup two dialogs as follow. A: 测试发现是分配内存导致,频繁分配内存(大约6M) 可能是堆管理导致 分配大内存分配失败,程序未对 ...
- pycharm许可证过期
1.选择enter license 2.选择license server 3.输入http://idea.imsxm.com 4.点击ok 好,解决了
- MOCTF 简单注入
最近在练习sql注入写脚本,记录一下思路,刚学的and 1=1也拿出来溜溜 http://119.23.73.3:5004/?id=1 首先,没有被过滤是正常显示. 没有被过滤但是查询不到就是空白,比 ...
- Leetcode 553.最优除法
最优除法 给定一组正整数,相邻的整数之间将会进行浮点除法操作.例如, [2,3,4] -> 2 / 3 / 4 . 但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级.你需要找出怎么添 ...
- top/free/df/jstack/jmap
上面的输出,load average后面分别是1分钟.5分钟.15分钟的负载情况.数据是每隔5秒钟检查一次活跃的进程数,然后根据这个数值算出来的.如果这个数除以CPU 的数目,结果高于5的时候就表明系 ...
- BZOJ 4569 [Scoi2016]萌萌哒 ——ST表 并查集
好题. ST表又叫做稀疏表,这里利用了他的性质. 显然每一个条件可以分成n个条件,显然过不了. 然后发现有许多状态是重复的,首先考虑线段树,没什么卵用. 然后ST表,可以每一层表示对应的区间大小的两个 ...
- POJ2723 Get Luffy Out 【2-sat】
题目 Ratish is a young man who always dreams of being a hero. One day his friend Luffy was caught by P ...
- Ubuntu 硬盘大小扩展
注:途中所有图均为配置好补的截图,部分来自其它网页. 1.选择硬盘(SCSI) 2.点击扩展,在弹出框填写期望的硬盘大小(不能比原硬盘大小容量小) 3.进入虚拟机,安装GParted. 命令:sudo ...
- 洛谷P1175 表达式的转换
P1175 表达式的转换 44通过 147提交 题目提供者该用户不存在 标签云端 难度提高+/省选- 时空限制1s / 128MB 提交 讨论 题解 最新讨论更多讨论 这题有毒 抄题解棒责五十! ...
- [暑假集训--数论]hdu1019 Least Common Multiple
The least common multiple (LCM) of a set of positive integers is the smallest positive integer which ...