shell入门基础&常见命令及用法
shell
shell是一个命令解释器,实际是一个程序,/bin/bash,linux中所有的命令都由它来解释,有自己的语法
shell脚本
以.sh结尾
shell语法+linux命令
注释:
单行注释 :
#
多行注释 :
:<<c c
shell执行方式
bash /path/to/script-name 或 /bin/bash /path/to/script-name (强烈推荐使用)
/path/to/script-name 或 ./script-name (当前路径下执行脚本)
source script-name 或 . script-name (注意“.“点号后面有空格)
前两种执行时,都会开启新的进程执行脚本
source不会开启新的进程
使用source时,可以与当前终端共享进程,共享变量(重点)
变量
1、name=itcast
2、name='itcast
$age' 不会解析里面的遍历
3、name=”itcast
$age“ 解析变量后,再拼接成新的字符串
命令变量
1、name=`ls`
2、name=$(ls)
括号里必须是linux命令,把命令执行的结果记录给变量
全局变量
方法一:
变量名=值
export 变量
方法二:(最常用)
export 变量名=值
如果是在终端中定义全局变量,作用范围是当前终端及子进程
如果想要自己定义的全局变量在跟系统的全局变量一样在所有环境都有效,需要在~/.bashrc或/etc/profile文件中定义:
修改~/.bashrc后,直接打开新的终端,定义的全局变量就生效了,此方式只对当前用户有效
修改/etc/profile时,需要重启操作系统,定义的全局变量才生效,此方式对所有用户有效
上面两种方式在修改文件后,如果想让全局变量在当前终端生效,需要执行命令source ~/.bashrc或source /etc/profile
查看变量
标准使用方式:"${变量名}"
内置
$0 获取当前执行的shell脚本文件名
$$ 获取执行shell脚本的进程号
$n 获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9就要用大括号括起来${10}
$# 获取当前shell命令行中参数的总个数
$? 获取执行上一个指令的返回值(0为成功,非0为失败)
$?:上一条命令是执行一个文件,返回的结果是文件中的最后一条命令
默认值
1、
变量a如果有内容,那么就输出a的变量值
变量a如果没有内容,那么就输出默认的内容
格式:
${变量名:-默认值}
2、
无论变量a是否有内容,都输出默认值
格式:
${变量名+默认值}
测试语句
等号左右必须有空格,中括号左右必须有空格
test a = 1
[ a = 1 ]
逻辑表达式
&&符号
命令1
&& 命令2
如果命令1执行成功,那么执行命令2
如果命令1执行失败,那么不执行命令2
||符号
命令1 || 命令2
1 如果命令1执行成功,那么不执行命令2
2 如果命令1执行失败,那么执行命令2
文件表达式
判断是否是可执行文件
[ -f abc ] && [ -x abc
]
计算表达式
a=$((a+1))
let a=a+1
重定向
命令>文件
命令返回的结果又正确和错误两种,1代表正确,2代表错误
bash chongdingxiang.sh
>/dev/null 2>&1 &
把正确的和错误的结果都输出到黑洞文件,而且命令在后台执行
linux四剑客
grep
grep -nr 关键字 .
find
find . -name
"*sh"
sed
行编辑工具
-i 真正的修改
s:替换
a:追加
i:插入
d:删除
sed -i "s#sed#SED#g"
sed.txt
每一行找到sed,把所有的替换为SED
sed -i
"2s#SED#sed#2" sed.txt
第二行的第二个SED替换为sed
sed -i "1,4a\hello2"
sed.txt
在1到4行的每一行后追加一行内容
sed -i "1i\hello3"
sed.txt
在第1行前插入一行
sed -i "2d" sed.txt
删除第2行
awk
分析工具,按行处理
awk
'BEGIN{FS=":";OFS="--"} {print $2,$NF}' awk2.txt
默认按照空格或tab键拆分数据,通过OFS指定输出时的分隔符
流程控制
if语句
if [ 条件
]
then
指令1
elif [ 条件2
]
then
指令2
else
指令3
fi
#!/bin/bash read -p "请输入性别:" sex
if [ "$sex" == "nan" ]
then
echo "输入的是男"
fi
case语句
#!/bin/bash case "$1" in
"start")
echo "启动"
;;
"stop")
echo "停止"
;;
"restart")
echo "重启"
;;
*)
echo "。。。。"
;;
esac
for循环
遍历文件夹
#!/bin/bash mkdir ../bak
for file in $(ls)
do
# echo "file: $file"
cp "$file" ../bak/"${file}-bak"
done
seq命令
#!/bin/bash for num in $(seq 5)
do
echo "num: $num"
done
while循环
#!/bin/bash count=1
while [ $count -lt 5 ]
do
echo "count: $count"
let count=count+1
done
until循环
#!/bin/bash count=1
until [ $count -ge 5 ]
do
echo "count: $count"
let count=count+1
done
函数
#!/bin/bash echo "jiaoben : $1,$2,$3"
dayin(){
if [ $# = 3 ]
then echo "hanshu : $1,$2,$3"
else
echo "需要3个参数"
fi
} #dayin e f g
dayin $1 $2 $3
使用source执行脚本,脚本中定义的变量和函数都能在当前终端调用
让root用户能够使用python虚拟环境
export
WORKON_HOME=/home/python/.virtualenvs/
source /usr/local/bin/virtualenvwrapper.sh
shell入门基础&常见命令及用法的更多相关文章
- Linux shell入门基础(六)
六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...
- Linux shell入门基础(一)
Linux shell入门基础(一): 01.增加删除用户: #useradd byf userdel byf(主目录未删除) userdel -r byf 该用户的属性:usermod 用 ...
- [Linux基础]Linux基础知识入门及常见命令.
前言:最近刚安装了Linux系统, 所以学了一些最基本的操作, 在这里把自己总结的笔记记录在这里. 1,V8:192.168.40.10V1:192.168.40.11Linux ip:192.168 ...
- shell 入门及常用命令
1.shell 是什么 shell是指一种程序, 它是和linux沟通的桥梁, 这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务, Ken Thompson 的 sh 是第一种 Un ...
- shell入门基础必备
作者:KornLee 2005-02-03 15:32:57 来自:Linux先生 1.建立和运行shell程序 什么是shell程序呢? 简单的说shell程序就是一个包含若干行 shel ...
- shell 入门基础
一. Shell变量 1. 变量可分为两类: 环境变量(全局变量) 和 局部变量 . 环境变量 : 所有的环境变量都是系统全局变量,可用于所有子进程中,这包括编辑器.shell脚本和各类应用 . 环境 ...
- linux下shell脚本中sed命令的用法
先来给一个案例: #将old.sql文件中的符号“|”替换为“,”,并保存到test.sql文件中 sed "s/|/,/g" "old.sql"> te ...
- Linux shell入门基础(八)
八.shell脚本sed&awk 01.sed的使用 流编辑器-Steam Editor #ed /etc/passwd 1,10p …… 1s/root/byf/p(替换root为byf) ...
- Linux shell入门基础(二)
二.shell对文本的操作 01.查看文本的命令 #cat /etc/passwd(并非对文本文件操作) #tail -5 /etc/passwd(查看末尾5行) #tail -f /var/log/ ...
随机推荐
- CSS media query应用中的层叠特性使用最佳实践
media query是css3规范中引入的,它提供了一种responsive design的基础机制:浏览器在不同size的设备中将以不同样式展现网页,这就给一个网页能够适应不同device一种可能 ...
- SQL Server ->> SQL Server 2016新特性之 -- AlwaysOn的增强改进
1)标准版也开始支持AlwaysOn了,只不过限制太多,比如副节点不能只读访问和只能有一个副节点. 2)副节点(只读节点)的负载均衡,这是我认为最有用的改进 3)自动failover的节点从2个增加到 ...
- c#编程指南(三) 泛型委托(Generic Delegate)
泛型委托实际上就是一个.NET Framework预定义的委托,基本涵盖了所有常用的委托,所以一般不用用户重新声明啦. 很简单,看下面简单的小例子: //void method(); Action t ...
- sql server——子查询
简述: 在查询语句中包含着有另外一条查询语句,被包含的查询语句称为子查询,包含着子查询的查询就称为父查询. 总之,子查询就是在查询语句里嵌套一条或者多条查询语句. 常用子查询分类: 一.独立子查询 特 ...
- Jquery学习---一键上传
一键上传 jar包下载 jquery代码 $(function () { $(".uploadfile").upload({ action: 'CourseXMLFileUploa ...
- Linux文件系统检查错误
我们的Linux系统在无法启动时候,通常需要进入单用户模式下进行修改一些配置文件,或调整一些参数方可.但是在进入单用户模式后,我们的/文件系统是只读模式,无法进行修改,那么这个时候我们就需要用到一条命 ...
- 零售企业ERP系统慢
数据库优化案例 https://www.cnblogs.com/double-K/p/9210982.html 写在前面 记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是 ...
- DB TABLE实践
我的数据库设计实践(一) 兜兜转转,突然发现我现在已经是一个老司机了,一直写代码都很忙,没有把很多点点滴滴的记录下来,今天开始就开始一个系列,分析当年我接触或者我设计过的表结构,有好有坏,有欢喜也 ...
- Vue-Resource请求PHP数据失败的原因
在写一个Vue项目的时候发现在使用Vue-Resource的post方法请求PHP数据时,完全没有反应,查阅资料才知道没有加配置参数: { emulateJSON:true } 这个配置参数的意思是: ...
- dom4j.jar有什么作用?
om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代 ...