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/ ...
随机推荐
- C#中的多线程 - 多线程的使用 z
原文:http://www.albahari.com/threading/part3.aspx 专题:C#中的多线程 1基于事件的异步模式Permalink 基于事件的异步模式(event-based ...
- DOS下常用命令
0,想进入某个驱动器,直接输入盘符即可.如:“d:”1,CD--进入指定目录 2,cls--清除显示器屏幕上的内容,使DOS提示符到屏幕左上角. 3,time--显示和设置DOS的系统时间 4,dir ...
- GO语言(六)接口使用
<music> |------<src> |-------<library> |-------manager.go |-------manager_test.go ...
- Vue收藏资料
组件库的全局引用和按需引用:http://www.cnblogs.com/zhuanzhuanfe/p/7516745.html
- Expression拼接
public static class PBuilder { /// <summary> /// 机关函数应用True时:单个AND有效,多个AND有效:单个OR无效,多个OR无效:混应时 ...
- POJ-1061 青蛙的约会---扩展欧几里得算法
题目链接: https://cn.vjudge.net/problem/POJ-1061 题目大意: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线 ...
- spring的声明式的事物管理和编程事务管理的区别
一.Spring对编程式事务的支持 Spring中的事务分为物理事务和逻辑事务: 物理事务:就是底层数据库提供的事务支持,如JDBC或JTA提供的事务: 逻辑事务:是Spring管理的事务,不同于物理 ...
- web页面显示当前系统时间并定时刷新
function showCurrentDate(){ var today,hour,second,minute,year,month,date; var strDate ; today=new Da ...
- BZOJ1924:[SDOI2010]所驼门王的宝藏(强连通分量,拓扑排序)
Description Input 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室 ...
- new ,malloc
特征 new/delete malloc/free 分配内存的位置 自由存储区 堆 内存分配失败返回值 完整类型指针 void* 内存分配失败返回值 默认抛出异常 返回NULL 分配内存的大小 由编译 ...