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/ ...
随机推荐
- recvfrom WSAEFAULT 10014 的错误记录
在使用 recvfrom 时一直没报错, 像这样 recvfrom(sock, Data, , (sockaddr*)&server_addr, &send_size) 当我看见百度百 ...
- B+/-Tree原理(mysql索引数据结构)
B+/-Tree原理 B-Tree介绍 B-Tree是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子:且M>2: 2.根结点的儿子数为[2, M ...
- Linux ->> uname命令 -- 查看当前系统信息
uname命令是用来打印当前Linux操作系统的信息,如果操作系统内核版本,操作系统是32位还是64位,计算机名字,操作系统安装时间,Linux操作系统类型 1) 操作系统是32位还是64位,感觉-m ...
- sql语句浅谈以及mysql遇到的问题解决见解
mysql数据库基本操作: .显示数据库和查看mysql版本 show databases; select version(); select user();查看用户 .选择数据库 use 数据库名; ...
- 用画小狗的方法来解释Java中的值传递
在开始看我画小狗之前,咱们先来看道很简单的题目: 下面程序的输出是什么? Dog myDog = new Dog("旺财"); changeName(myDog); System. ...
- MySQL语法一:数据定义语句
MySQL语句语法主要分为以下三大类: 一.数据定义语句DDL(CREATE,ALTER,DROP,DECLARE) 数据定义语句是用于修改表结构的. 一).语法提炼: 二).由上图可知,数据定义语句 ...
- 对HandlerExecutionChain类的理解分析
HandlerExecutionChain类比较简单,好理解. ==================================================================== ...
- 使用View填充ViewPager
ViewPager在app开发中十分常见.今天以一个例子详细解读下ViewPager的基础知识. 一.什么是ViewPager 可以这样理解,ViewPager就相当于一个容器,它的里面可以装view ...
- JS常用方法封装
迭代添加各种常用方法:项目中一定会有很多常用的方法,包括:取值,校验,等...... 获取 url 后的参数 function getQueryString(name) { var reg = new ...
- 给已安装的NGINX添加新的模块
给已安装的NGINX添加新的模块 2018-11-16 14:02:45 Visit 0 使用 nginx -V 查看当前nginx的信息,包括版本号和configure编译配置信息 版本号 : ...