常用 shell 命令

文件操作

  • 新建文件 touch 1.txt
  • 新建文件夹 mkdir test
  • vim编辑文件 vim 1.txt (按i进入编辑模式,:wq保持退出,:qa!强制退出)
  • 查看文件 cat 1.txt
  • 删除空目录 rmdir -r test
  • 删除非空目录 rm -rf test
  • 删除文件 rm 1.txt
  • 复制文件 cp 源文件 目的地
  • 移动文件 mv 源文件 目的地
  • 列出文件 ls , ls -l
  • 输出重定向命令:> ,如:ls > test.txt 覆盖 >> 追加
  • 分屏显示:more index.html . 当index.html内容超过一屏,则只显示一屏,按空格显示剩余内容
  • 管道:| ,ls | more, 一个命令的输出可以通过管道做为另一个命令的输入
  • 清屏:clear
  • 文本搜索: grep , grep [-选项] ‘搜索内容串’文件名
grep -E '\.jsx?$'  // 使用正则匹配
grep -v '__story__'  // 使用反转匹配,即匹配不是__story__ 的文件
grep -n "abc" // 显示行号

grep正则表达式元字符集:
^ 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
锚定行的结束 如:'grep'匹配所有以grep结尾的行。
. 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。

  • 匹配零个或多个先前字符 如:'grep'匹配所有一个或多个空格后紧跟grep的行。 .一起用代表任意字符。
    [] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
    [^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
  • 文件查找:find 查找路径 查找的标准 查找到之后的动作,
find . -name '*.txt'  // 当前目录按文件名查找
find . -type f     // 当前目录按文件类型查找
  • 文本处理: sed
sed -n filename  // sed 默认会打印文件内容,故常用 -n 禁止该行为,使其只打印匹配到的内容
sed -n '2p' data // 打印第二行 ,p 表示打印,前面跟数字表示打印第几行 ‘1,4p’打印1-4行
sed -n '/last/,4p' // 打印从/last/到第四行的内容,p前面也可跟正则表达式,常用模式是 sed -n '开始,结束p',开始和结束都可用正则
sed -n '/last/,4!p' // 用!表示对前面模式取反,即打印除了从/last/到第四行的内容
sed -n '1,4{=;p}' data // p只是一个命令,若想用其他命令,如=表示显示行号,需用{}包裹,不同命令用;分隔
sed -e '/^#/d' -e '/^$/d' /etc/vsftpd.conf // sed支持对单个文件同时做不同操作,每个操作用 -e 参数
sed -i  // 直接修改读取的文件内容,而不是输出到终端
// sed 常用命令有:
p 打印
= 显示行号
d 删除行
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
s 使用替换模式替换相应模式  sed 's/要被取代的字串/新的字串/g'
c\ 用新文本替换定位文本
  • 文件统计:wc
wc -l  // 统计行数
wc -w // 统计字数
  • 文件打包: tar -cvf ***.tar 1.py 2.py 3.txt *.c
  • 文件解包:tar -xvf ***.tar -C ~/Desktop
  • 文件上传:scp /home/open/tools.tar.gz root@113.223.228.175:/home/root
  • hash命令:hash nrm 第一次执行命令shell解释器默认的会从PATH路径下寻找该命令的路径,当你第二次使用该命令时,shell解释器首先会查看hash表,没有该命令才会去PATH路径下寻找
  • 一些全局变量:HOME,PATH,PWD
  • 网络操作: curl
  • 磁盘使用情况 du -hs *

权限操作

https://www.jianshu.com/p/b2c35263eccd

Shell 脚本

基本语法
  • 变量
    1、定义:申明时不用关键字,直接写变量名称,如 DIR = "",变量名前加 readonly DIR 表示只读
    2、取值:跟ES6有点像,${DIR} ,不加花括号也可以,但不推荐
    3、删除: unset DIR , 不能删只读变量
    5、字符串:单双引号包裹,单引号内不能使用取值操作
    6、字符串操作:
str  =  "hello world"
// 获取长度
echo ${#str}                  11
// 提取字串
echo ${string:1:4}        ello
// 查找字串(查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):)
echo `expr index "$str" io`  4

7、数组操作

// 申明,空格区分元素
arr = (1 2 3 4)
// 取值,要用 ${}包裹
${arr[index]}
// 获取数组长度
${#arr[@]}
  • 表达式语法
test = `expr 1+2`
test = $(1+2)
  • 运算符
    条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]
// 算数运算符,数字与操作符之间要有空格,
`expr $a + $b`
// 关系运算符,只支持数字,不支持字符串,除非字符串的值是数字
if [ $a -eq $b ]
// 布尔、逻辑运算符  and or !     -a -r ! && ||
if [ $a -lt 100 -a $b -gt 15 ]

字符串运算符


image.png

文件测试运算符


image.png
  • 流程控制
    if 操作
// if
if condition
then
    command1 
    command2
fi
// if...else..
if condition
then
    command1 
    command2
else
    command
fi
// if...elseif...else
if condition
then
    command1 
    command2
elif
    command
else
    command
fi

for 循环

// 多行
for var in item1 item2
do
    command1
    command2
    ...
    commandN
done
// 单行
for var in item1 item2; do command1; command2 done;

// 例子
for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done
  • 一些特殊用法
    [ ] 与 [[ ]] ,前者里的内容是表达式,遇到<>这种在shell里有特殊含义的字符时需要转义,后者不需要,所以在写 if 判断时,最好用后者
if [ $# \< 1 ]; then 等价于
if [[ $# < 1 ]]; then    // 注意空格:开始、结尾、运算符

let a=1+2 与 a = expr 1+2 与 let a=$((1+2)) 与 let a=$[1+2] 等价
命令替换

DIR1=$(cd "$(dirname "$0")"; pwd)
最佳实践
  • 常用变量类型三种
// 数字
SIZE = 1024
// 字符串
DIR = '../dir'
// 数组
arr = (1 2 3 4)
  • 字符串运算符
if [[ a=b ]]
if [[ a!=b ]]
if [[ -z a ]]  // 长度为0
if [[ -n "a" ]]  // 长度不为0
  • 文件运算符 file 就是表示文件路径的字符串
if [[ -e file ]]  // 文件是否存在(目录或文件)
if [[ -d file ]]  // 目录
if [[ -f file ]]  // 文件
if [[ -x file ]]  // 可执行权限
  • 逻辑运算符
    使用单中括号做复杂判断
a=5
b=10

# 非运算
if !(( a == b ))
then
   echo "a!=b" 
fi
# 或运算
if [ $a -gt 8 -o $b -gt 8 ]
then
   echo "a > 8 || b > 8" 
fi
# 与运算
if [ $a -lt 10 -a $a -gt 0 ]
then
   echo "0<a<10" 
fi
  • 流程控制
if conditon
then
    command
fi

if conditon
then
    command
else
    command
fi
  • 遍历数组操作
for i in ${array[@]}
do
   echo $i
done
  • 函数
// 声明
function funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
    command
}
// 调用传参
funWithParam 1 2 3 4 5 6 7 8 9 34 73
  • 错误处理
    $?这个常量代表的就是上一段shell的返回值,0 表示正常,非0 表示异常;
    当有连续的 shell 命令执行时,可在每条命令之间加个 $? 的判断;不过这样写比较麻烦,可以在多条命令之间用 && 连接,这样前面的命令失败的话,后面的命令是不会执行的
// 该命令会输出 当前执行的命令并在命令失败时自动退出,不继续执行
set -euxo pipefail
  • $ 的多种用法
// ${a} 表取值 和 $a 差不多
// $[] 和 $(()) 支持数字运算
a=1
b=2
echo $[$a+$b]
echo $(($a+$b))
// $() 表命令替换,就是在shell 中fork 一个子进程去做 他们 括起来的命令 然后将结果再返回父进程
version=$(command -v npx)
echo $version
  • 交互输入
#!/bin/bash
read -p "May I ask your name: " name
echo "Hello $name"
exit 0

Mac设置环境变量

// 1、打开bash_profile
vim ~/.bash_profile
// 2、粘贴路径
export PATH="$PATH:/Users/FYC/arcFolder/arcanist/bin/"

// jdk
使用命令打开./bash_profile文件

vim ~/.bash_profile 



配置环境

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME  
export PATH 
export CLASSPATH 
// 3、链接一下
source ~/.bash_profle

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • Linux习惯问题: 在vim编辑时,按了ctrl + s后,再按ctrl + q就可以继续执行了。ctrl + ...
    光着脚的鞋阅读 4,509评论 0 16
  • Linux Shell常用shell命令 一、文件、目录操作命令 1、ls命令 功能:显示文件和目录的信息 ls以...
    枫叶鱼水阅读 580评论 0 2
  • 摘要:Linux以其强大的命令行称霸江湖,Shell命令是数据极客的必修兵器。探索性数据分析,在需求和数据都不太明...
    i败火阅读 5,063评论 8 34
  • 我拿着一片落叶的忧伤不知道 怎么阅读这季节的原创,他快乐着 并郁闷着,像某个院落的咖啡在午后蠢蠢欲动 而厚厚的甜味...
    情岛渔夫阅读 206评论 0 1
  • 每次学习最大的困难随时想放弃,不干了,不学了,每天欢欢乐乐的吃吃喝喝得了。受这份罪,转过身就是自己无边的焦虑,怎么...
    奔跑饺子阅读 236评论 0 3