Linux学习--第十天--bash脚本、用户自定义变量、环境变量、位置参数变量、预定义变量、标准输入输出、wc、history、dd、PS1
shell简介
分为两种c shell 和b shell
b shell:sh、ksh、Bash、psh、zsh; (Bash和sh兼容,linux基本shell是Bash)
c shell:csh、tcsh; (语言风格类似C语言,所以得名c shell)
查看系统shell :cat /etc/shells
echo
echo -e "ab\bc" #输出ac
echo -e "\e[1;31m abcd \e[0m" #输出红色的abcd,30m黑色,31m红色,32m绿色,33m黄色等
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换页;
\n 换行且光标移至行首;
\r 回车;
\t 插入tab,水平制表符;
\v 垂直制表符;
\\ 插入\字符;
\0nnn 插入nnn(八进制)所代表的ASCII字符;
\xhh 插入hh(十六进制)所代表的ASCII字符;
脚本执行
chmod 755 my.sh
./my.shbash my.sh
如果是dos过来的脚本,换行符和linux中不一样不能直接执行,使用dos2unix命令
yum update -y dos2unix
history
history -c #清楚历史命令
history -w #将历史强行写入.bash_history 而不是等登出后
!n #执行history 第n个
!! #执行上一条命令
!字符串开头 #执行最近的字符串想同的命令
vi /etc/profile #修改保存历史的默认条数
alias
alias vi="vim"
unalias vi
vi /root/.bashrc #使别名永久生效
命令执行的顺序
- 第一顺序为绝对路径或相对路径执行的命令
- 别名
- Bash内部命令
- 按照环境变量$PATH中定义的目录找到第一条命令
快捷键
ctrl+a #将光标移动到命令开头
ctrl+c #终止命令
ctrl+z #暂停命令,并且放入后台
ctrl+u #剪切光标前的命令部分
ctrl+k #剪切光标后的命令部分
ctrl+y #粘帖命令
ctrl+l #清屏
标准输入输出
/dev/stdin #标准输入的设备文件名,文件描述符0
/dev/stdout #标准输出的设备文件名,文件描述符1
/dev/stderr #标准错误的设备文件名,文件描述符2
ls > my.txt #覆盖方式将ls命令结果标准输入到my.txt,出错则不会写入文件,直接输出在屏幕中
ls aa 2>> my.txt #因为没有aa文件,追加方式将错误追加到my.txt,有aa文件则对my.txt无任何影响。
命令>文件 2>&1 #覆盖方式将正确输出和错误输出都保存在同一个文件中
命令 &>>文件 #追加方式将正确输出和错误输出都保存在同一个文件中
命令>>文件1 2>>文件2 #正确输出追加到文件1,错误输出追加到文件2
wc
wc -c my.txt #显示文本的字符数
wc -l my.txt #显示文本的行数
wc -w my.txt #显示文本的单词数
wc -c <my.txt #显示文本的字符数
wc -l < my.txt #显示文本的行数
wc < my.txt #显示文本的单词数,字符数,行数
wc <<hello
ad
dsd
decho
hello
多命令执行
; #命令直接没有任何关系
&& #前面命令无错,再执行后面的,否则不执行后面的命令
|| #前面命令错误,再执行后面的,否则不执行后面的命令
ls /root/hehe || echo 'no'
ls /etc/services && ll
命令 && echo yes || echo no
管道符
命令1 | 命令2 #命令1的正确输出作为命令2的操作对象
grep
grep 'ss' /etc/services
grep -i 'ss' /etc/services #忽略大小写
grep -n 'ss' /etc/services #显示行号
grep -v 'ss' /etc/services #查找不存在ss的行
通配符
?
*
[]
[a-g]
[^0-5]
Bash中其他特殊符号
'' #在单引号中所有特殊符号都没有特殊含义
"" #在双引号中所有特殊符号都没有特殊含义,除了$、`、\
`` #反引号,反引号括起来的是系统命令,在Bash中会先执行它,同$()。不推荐,容易看错
$() #引用系统命令
#
$
\
四种变量
用户自定义变量 #Bash中,变量默认类型都是字符型,若要进行数值运算,必须指定为数值型。
#变量定义用等号连接,等号两侧不能有空格
#变量值中可以用反斜杠转义
#只在当前shell中生效
#name=12
#echo $name
#查看所有变量: set
环境变量 #尽量大写,以便区分
#当前shell和所有子shell中生效,这是指的临时环境变量
#如果将环境变量写入配置文件,则在所有的shell中生效。
#临时:
#声明变量: export 变量名=变量值
#查询变量: env
#删除变量: unset 变量名
#进入子shell: bash
#退出当前shell: exit
#查看shell树形结构: pstree
#PS1系统提示符:可以算是系统变量,但是env并不能查看到。
#设置PS1: PS1='[\u@\t \w]\$ '
#设置临时环境变量 PATH="$PATH":/root
位置参数变量 #预定义变量中的一种,因为多,所有单独列出。固定的,是用来向脚本中传递参数或数据的。
#$n $0表示命令本身或者文件名,$1,第一个参数,$2.第二个参数。。。
#$* 把所有参数看成一个整体
#$@ 类似$*,但是把每个参数区分对待
#$# 参数个数
预定义变量 #$? 最后一次命令的返回状态,0表示正确,非0表示上一个命令执行不正确。
#$$ 当前进程的进程号PID
#$! 后台运行的最后一个进程的进程号PID
read
read -s -t 30 -n 3 -p "input a number" yournumber #-s隐藏输入的数据,-t秒数,-p提示,-n数字。
三种运算方式
aa=11
bb=22
declare -i cc=$aa+$bb # -i 声明为整数类型,-p 显示被声明的类型,-x 声明为环境变量
echo $cc
aa=11
bb=22
dd=$(expr $aa + $bb) #注意空格
echo $dd
aa=11
bb=22
ff=$(( $aa+$bb )) #推荐
echo $ff
运算符
判断测试表达式
Linux学习--第十天--bash脚本、用户自定义变量、环境变量、位置参数变量、预定义变量、标准输入输出、wc、history、dd、PS1的更多相关文章
- Linux学习之十四、管线命令
Linux学习之十四.管线命令 地址:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_6.php
- [Shell]Bash变量:自定义变量 & 环境变量 & 位置参数变量 & 预定义变量
--------------------------------------------------------------------------------- 变量是计算机内存的单元,其中存放的值 ...
- Linux Shell基础 位置参数变量、预定义变量
位置参数变量 在 Linux 的命令行中,当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数.其中,$0 代表命令行本身,$1 代表第 1 个参数,$2 代表第 2 个参数 ...
- PHP学习笔记1.2——预定义变量参考
预定义变量和用户自定义变量在使用上没有区别,大多数预定义变量的执行结果都是服务器的相关信息(如:版本号.路径.错误参数等),所以我们很少将其用于网站前台开发,如果被别有用心得人知道了后,会严重威胁服务 ...
- 40 VSCode下.json文件的编写——(1) linux/g++ (2).json中参数与预定义变量的意义解释
0 引言 转入linux/VSCode编程之后,迫切了解到有必有较为系统地学习一下VSCode中相关配置文件的写法.下面将分为 linux/g++编译指令..json文件关键词/替换变量的意义.编译链 ...
- Shell脚本_位置参数和预定义参数
一.位置参数变量 1.输出两个输入参数之和 l1.sh 1 2 3 4 5 6 7 8 9 #!/bin/bash num1=$1 num2=$2 sum=$((num1+num2)) # ...
- Linux学习Day6:编写Shell脚本
Shell脚本命令的工作方式有两种: 交互式(Interactive):用户每输入一条命令就立即执行. 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多 ...
- Linux学习之十六、文件的格式化与相关处理
原文地址:http://vbird.dic.ksu.edu.tw/linux_basic/0330regularex_4.php 文件的格式化与相关处理 接下来让我们来将文件进行一些简单的编排吧!底下 ...
- Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)
阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 ...
随机推荐
- ActiveMQ配置文档
本文介绍一对一.一对多.持久化.非持久化消息配置方式 一.创建项目 导入jar 二.创建MQ.xml <!-- 配置JMS连接工厂 --> <bean id="connec ...
- 全面解读php-常量及数据类型
本文主要讲解字符串的定义方式,数据类型和常量的相关内容. 一.字符串的定义方式 1.字符串的定义方式除了单双引号外,还有一种叫 heredoc 和 newdoc 在我们需要定义很长一段儿字符串的时候 ...
- DP练习题——洛谷P1970花匠
目录 题目描述: 输入输出格式: 输入格式: 输出格式: 输入输出样例: 输入样例: 输出样例: 题目分析: 解法一: 解法二: 结语: 题目描述: 洛谷\(P1970\) 花匠栋栋种了一排花,每株花 ...
- leetcode 41缺失的第一个正数
time O(n) space O(1) class Solution { public: int firstMissingPositive(vector<int>& nums) ...
- c++中字符输入函数cin.getline在输入char与string时的不同
cin.getline在输入char时: using namespace std; ; char name[ArSize]; char dessert[ArSize]; cout << & ...
- Mimikatz 攻防杂谈
前几天看到了老外一篇讲 mimikatz 防御的文章,感觉行文思路还不错,但是内容稍有不足,国内也有一篇翻译,但是只是照着错误翻译的,所以就萌生了把那篇优秀文章,翻译复现,并加入其它一些内容,本文只是 ...
- 使用boost库获取文件夹下所有文件名字
最近整理项目发现一个曾经找了好久的有用的代码片段,就是获取文件夹下所有文件的名字,和当前文件的绝对路径. 记录一下. 使用的是boost库, #include <boost/filesystem ...
- 借助marquee实现弹幕效果
HTML标签marquee实现滚动效果 .基于此,实现简易版 弹幕: HTML <div class="right_liuyan"> <marquee id=& ...
- 【VS开发】修改MainFrame窗口名称1
在VS2010下新建一个MFC的多文档应用程序,程序默认的标题是"文档名-工程名".图标默认的是写着MFC的三个方块.但在很多软件中都不是使用的默认设置,开发者们都将标题和图标改过 ...
- python 并发编程 基于gevent模块 协程池 实现并发的套接字通信
基于协程池 实现并发的套接字通信 客户端: from socket import * client = socket(AF_INET, SOCK_STREAM) client.connect(('12 ...