关于历史命令

Shell相关

!! 是上一次执行的命令

!字符串  指执行最近一次以这个字符串开头的命令

!$ 取出上一条命令最后一个单词或命令

*匹配0个或多个字符         ?匹配一个字符

Ctrl+z  暂停一个进程          fg(foreground)恢复这个进程到前台  bg(background)恢复这个进程到后台

如果暂停多个进程,则可以使用jobs命令,查看进程编号 ,如1 或2。然后fg 和bg的时候后边加上这个编号,指定返回哪个进程。 如  fg 2

Ctrl+c  结束掉一个进程

env 显示所有环境变量

set显示当前shell所有变量(包括自定义、环境变量

设置变量时需要注意:

a=b   b作为变量内容,等号两边不能有空格   ,变量内容带有特殊字符时,需要加上单引号

如:  a=’str      heheh’

单引号会使里边的特殊符号失去作用:

比如:  a=’$abc’      那么a就是$abc

a=”$abc”  那么a就是$abc变量的值

变量里本身含有单引号,这就需要用双引号括起来了,变量里若含有双引号可以使用\” 转义

bash进入子shell,pstree可以查看

父shell的变量,让子shell可以使用,需要命令 export 一下

释放一个变量  unset

管道符 |

如: 查看一个文件有多少行    cat  hi.txt | wc -l

-----------------------------------------------------------------------

变量定义

#x='fff'

#echo $x

#x="$x"hehe

#export x   (使之成为环境变量)

===============

追加一个目录如/root 到环境变量PATH

# PATH=$PATH:/root

# echo $PATH

===============

#bash  (子shell)

#pstree

set (查看所有变量)

env (查看环境变量)

----------------------

查看当前语系

locale

echo $LANG

echo $LC_ALL

------------------------

位置参数变量

$n 第几个参数

$* 全部变量 整体对待

$@ 全部变量 单独对待

$# 参数个数

---------------------

shell脚本开头一行

#!/bin/bash

---------------------

预定义变量

$?   (返回上一条命令执行正确否 0正确)

---------------------

read -p -s 用户输入的字符赋给变量

--------------------

declare -i -a -x(export) -p    变量声明为一个类型   -i整型 -a数组 -x环境变量 -p变量属性

---------------------

配置文件

配置文件加载顺序图

-----------------------------

欢迎信息  /etc/motd

--------------------------

正则&&通配符

----------------------------------

字符操作命令

cut   (比较适合规律的列文档    -f 列    -d分界符

-----------------------------------

printf

awk

# awk '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s\n",$4,$5,$6}'  netstat.txt

$0 当前记录(这个变量中存放着整个行的内容)

$1~$n 当前记录的第n个字段,字段间由FS分隔

查看文件系统/dev/root下的使用率:

df -h | grep "/dev/root" | awk '{print $5}' | cut -d '%' -f 1

-------------------------------------

sed

点击酷壳网这个也不错

---------------------------------------

sort

wc

--------------------------------------

插播个知识点:软硬连接

软连接类似于快捷方式,不同的i节点,删原文件,另一个打不开;硬链接就是一个文件,相同i节点,他俩名字不同而已,删除一个,另一个仍然访问。

---------------------------------------

标准输入输出的知识点:

标准输入:

  键盘  /dev/stdin   文件描述符0

标准输出:

  显示器  /dev/stdout   文件描述符1(标准正确输出)

标准错误输出:

  显示器  /dev/stderr   文件描述符2

比如:

标准正确输出的重定向: #echo 'aaa' 1> test1.log

有可能我的命令出错了,此时可以把这个报错信息标准错误输出。比如echoz命令写错了,(>>是追加文件,而不是覆盖)

标准错误输出的重定向: #echoz 'bbb' 2>> test2.log

正确和错误的输出同时重定向到一个地方,这种场景比较多见:这样格式  2>&1放在后头

#echoz  'ccc' >> test3.log 2>&1

或者这样格式:  #date &>> test3.log

正确输出放到一个地方,错误输出放到一个地方(分开保存,/dev/null是空设备:

#echo 'ddd'  >> test4.log  2>>/dev/null

======================================

shell判断符号,推荐[[  ]],语法要求:中括号内容左右两边留有空格

test -e /data/www/index.php

[ -e /data/www/index.php ]

[[  -e /data/www/index.php ]]

------------------------------

分支判断语法

注意:if要以if收尾。类似do以done收尾。case以esac收尾;

if后要有then,如果then不换行,那么then前边要有个分号;else后则不需要then;

elif的关键词;

#!/bin/bash

a='bb' #赋值操作等号两边不能有空格

if test -e "./test.sh"
then echo 'exists' #if 后有then
else echo 'no exists' # else后没有then
fi if [[ -n ${a} ]]
then echo ${a}
fi b=
if [ ${b} -eq ]
then echo '$b='"$b" #输出$b= 这里注意单双引号的区别
fi echo + #输出 + echo $((+)) #输出3

shell的几种常用的循环方式:

#!/bin/bash

for i in
do
echo $i
done echo for j in {..}
do
echo $j
done for file in "./*"
do
echo $file
done for file in $(ls)
do
echo $file
done

比如现在文件夹下有n个文件,只有名字是a.txt的不想删除,其他都要删。可以利用xargs

比如: ls | grep -v a.txt | xargs rm -rf

${var:-word}这个意思是如果var这个变量存在且不为空,就返回var,否则返回word

点击慕课网这个入门也很好

shell编程的笔记的更多相关文章

  1. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  2. shell编程学习笔记(十):Shell中的for循环

    shell编程中可以实现for循环遍历 先来写一个最简单的吧,循环输出从1到10,脚本内容为: #! /bin/sh for i in {1..10} do echo $i done 上面的代码从1到 ...

  3. shell编程学习笔记(一):编写我的第一段代码

    目前在学习Shell编程,我会把我的学习笔记记录在这里.大神可以直接略过~ 嗯,第一段代码,肯定是要输出Hello World了~ 以下蓝色字体的内容为linux命令,红色字体的内容为输出的内容: # ...

  4. shell编程学习笔记【原创】

    本文为本人学习笔记,如有转载请注明出处,谢谢 一.Bourne Shell 有如下四种变量: 用户自定义变量 位置变量,即命令行参数 预定义变量 环境变量 二.位置变量 $ 与键入的命令行一样,包含脚 ...

  5. shell编程学习笔记(八):Shell中的if条件判断

    编程语言中都有条件判断,shell编程也不例外,下面我们来看一下shell中应该怎么使用if条件判断 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts ...

  6. shell编程学习笔记(六):cat命令的使用

    这一篇不是讲shell编程的,专门讲cat命令.shell编程书用到了这个cat命令,顺便说一下cat命令. cat命令有多种用法,我一一来列举(以下蓝色字体部分为Linux命令,红色字体的内容为输出 ...

  7. shell编程学习笔记(五):Shell中脚本的参数

    在执行Shell脚本的时候,可以在执行时带上参数,相当于传递参数给脚本,下面我们看一下怎么使用这个参数 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/script ...

  8. shell编程学习笔记之特殊变量($0、$1、$2、 $?、 $# 、$@、 $*)

    特殊变量($0.$1.$2. $?. $# .$@. $*) shell编程中有一些特殊的变量可以使用.这些变量在脚本中可以作为全局变量来使用. 名称 说明 $0 脚本名称 $1-9 脚本执行时的参数 ...

  9. shell编程学习笔记之sed编辑器

    在shell编程中,大多数处理的都是文本文件.对文本文件进行处理除了使用交互式文本编辑器(vi[m],gedit......)也可以使用另外一类:流编辑器. 流编辑器:使用预定义的编辑规则来对文本进行 ...

  10. GNU Bash Shell 编程图解笔记

    bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写.1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括 ...

随机推荐

  1. idea配置热部署

    第一步:添加依赖使用spring-boot-devtools提供的开发者工具spring-boot项目中引入如下依赖 <dependency><groupId>org.spri ...

  2. VMware虚拟机安装黑苹果MacOS Mojave系统详细教程

    更多资源请百度搜索:前端资源网 欢迎关注我的博客:www.w3h5.com 最近遇到一个H5页面的 iPhone X 刘海兼容问题.查到一个 XCode 编辑器,可以模拟 iPhone X 环境运行. ...

  3. php递归获取无限分类菜单

    从数据库获取所有菜单信息,需要根据id,pid字段获取主菜单及其子菜单,以及子菜单下的子菜单,可以通过函数递归来实现. <?php class Menu { public $menu = arr ...

  4. SQLServer 学习笔记之超详细基础SQL语句 Part 8

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 7------------------- --触发器str_trigge ...

  5. hadoop中实现java网络爬虫

    这一篇网络爬虫的实现就要联系上大数据了.在前两篇java实现网络爬虫和heritrix实现网络爬虫的基础上,这一次是要完整的做一次数据的收集.数据上传.数据分析.数据结果读取.数据可视化. 需要用到 ...

  6. 关于form表单提交到Servlet的时候出现tomcat启动错误的解决方法

    1.遇到的问题 今天在写jsp代码的时候通过form表单提交到Servlet的时候出现的tomcat启动错误,琢磨了半天,终于找到了解决方法. 解决问题的关键就在于xml配置的路径和servlet中默 ...

  7. LeetCode题解之 Binary Tree Preorder Traversal

    1.题目描述 2.问题分析 利用递归. 3.代码 vector<int> preorderTraversal(TreeNode* root) { vector<int> v; ...

  8. Sql Server Tempdb原理-日志机制解析实践

    笔者曾经在面试DBA时的一句”tempdb为什么比其他数据库快?”使得95%以上的应试者都一脸茫然.Tempdb作为Sqlserver的重要特征,一直以来大家对它可能即熟悉又陌生.熟悉是我们时时刻刻都 ...

  9. 转:双向链表dblinklist

    数据结构C#版笔记--双向链表(DbLinkList)   这是数据结构C#版笔记--线性表(Data Structure)之单链表(LinkList)的继续,对于双向链接,节点上除了Next属性外, ...

  10. 数据库迁移之从oracle 到 MySQL最简单的方法

    数据库迁移之从oracle 到 MySQL最简单的方法 因工作需要将oracle数据库换到MySQL数据库,数据量比较大,百万级别的数据,表也比较多,有没有一种既快捷又安全的方法呢?答案是肯定的,下面 ...