linux shell 基础

解释器

脚本文件第一行要求指定解释器: shebang(#!)
这就是为什么大家在脚本第一行中常常见到

#! /bin/bash
#! /bin/sh
#!/usr/bin/env python

注释

脚本文件使用#或<<符号实现单行或多行注释
其中多行注释需要用两个相同的字符做起始符, 如

<<zhushi
# echo hello
# echo world
zhushi

执行权限

如果你是root 用户, 一定要注意给其他用户添加可执行权限给
chmod +x test.sh
如果没有x权限, 可以尝试用解释器执行, eg

<<zhushi
# bash test.sh # 使用bash解释器
# sh test.sh # 使用 sh 解释器
zhushi

pstree

可使用 pstree对运行的脚本进行进行查看

脚本运行方式

# bash test.sh # 开启子进程运行
# source test.sh # 不开启子进程, 返回脚本执行结果, 原文解释 Read and execute commands from filename in the current shell environment and return the exit status of the last command executed from filename. 
# exec test.sh # 不开启子进程, 而是用命令替换当前的shell 环境.

显示行信息

# echo "hello world" # 输出 hello world

# printf "hello world" # 输出 hello world

# printf "%s%s" "hello world"  # 输出 hello world

debug

执行shell 脚本时 加 -x 参数

# bash -x  test.sh

read

read [选项] [变量名]
read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name .

# read test_key # 读取标准输入, 键盘输入 666
# echo $test_key # 输出 666

who

用户登录计算机日志

# who # 输出用户登录日志
# who | wc -l # 用户登录次数

重定向

大家经常在shell 脚本中看到 >, >>, 1>, 2>分别是什么意思 ?
>和>> 将符号重定向之文件

# echo "hello world" > test.txt # hello world 符号重定向入test.txt, 覆盖重写方式

# echo "hello world two" >> test.txt # 此时文件有两行, 为追加方式

其中 0 为标准输入, 1 为标准输出, 2 为标准错误

# ls /sbin > test.txt #重定向标准输出, 只含正确信息
# ls /sbin 1> test.txt # 同上
# ls /sbin 2> test.txt # 标准错误重定向,只含错误信息 如果没有权限的话, 错误数据信息会输出到文件中
# ls /sbin 2>&1 > test.txt # 标准输出和错误同时重定向到文件,包含正确和错误信息

touch

创建空白文件

# touch empty.txt # 空白文件

# vim empty.txt # vim编辑器编辑文件

引号

单引号 ‘’ 能够转义特殊字符, 双引号" "则不能

# nihao="hello world"

# echo "$nihao" # $nihao为变量
hello world

# echo '$nihao' # 相当于 echo "\$nihao", \ 为转义符
 $nihao

反引号

反引号 `` 可以执行其他常用命令

# date #执行日期命令
Thu Mar 31 21:48:23 CST 2022
# echo "date" # 引号把命令当成字符对待
date
# echo `date` # 反引号执行命令
Thu Mar 31 21:48:23 CST 2022

常用查看文件

# cat test.txt # 全部打开文件
# head 100 test.txt # 显示头部100行
# tail 100 test.txt # 显示尾部100行
# more test.txt #滚动显示文件

变量

# nihao="hello world"
# echo nihao # nihao 是被当做字符
nihao
# echo $nihao # $nihao 是取变量的值
hello world

grep

# grep [参数][匹配模式][文件]
# grep hello test.txt #显示过滤的行
hello world

其中 匹配模式可以是正则表达式, 这里不做详述

算数运算

Shell 支持算数运算 如, +, -, *, /, ++, --, … 格式同C语言接近, 读者可查看相关文档.

命令之间的逻辑关系

# test A ; B ; C ; #命令之间可以用 ; 无论正确与否, 三条命令都会执行完成
# test A && B ; # A 正确执行, 则执行B; 否则, 不执行B
# test A || B ; # A 不能正确执行, 则执行 B;
# test A && B : C # A 正确者执行 B, 否则执行C ; 同C语言 A ? B : C 效果类似  
# echo $? # 取上一次命令返回结果, 0为正确, 1 为错误

chmod

修改权限

# chmod +r test.sh # 对所有用户组添加读权限
# chmod +w test.sh # 对所有用户组添加写权限
# chmod +x test.sh # 对所有用户组添加执行权限
# chmod -r test.sh # 对所有用户组删除读权限
# chmod -w test.sh # 对所有用户组删除写权限
# chmod -x test.sh # 对所有用户组删除执行权限

条件语句

Shell 支持条件语句, 格式如下

# if CONDITION, MODULE => ARGUMENTS;
if condition
then
  命令
fi

if condition; then
  命令1
else
  命令2
...
fi

case 语句

# case string ?in? patList body ?patList body ...?

case string in
模式1)
 命令1;;
模式2)
 命令2;;
 ...
 *)
 命令n;;
 esac

循环

for condition
do
  命令...
done

while condition
do
  命令...
done

如同c 语言, 可用 continue 和 break 来控制跳过或者终止逻辑.

函数

function () {
 命令
 return
}

扩展符号

# echo {hello, world} # 对字符串扩展
hello world
# echo ~ # 用户根目录
/root
# ls /root | wc -l # | 为管道, 左边的输出 | 作为右边的输入

进程管理

# ps aux # 查看进程
# ps aux | grep test #查看 test 进程信息
# kill -9 pid # kill进程

xargs

用于读取管道中的数据, 把结果数据作为参数传给命令, 适合需要参数的命令, 如echo , printf , kill 等等

# ps aux | wc -l # wc 可以直接处理数据
# ps aux | echo # 输出为空, echo 不支持直接处理数据, 仅能接受参数作为数据
# ps aux | xargs echo # 输出所有进行信息, xargs 将数据转化为参数

结论

Shell 还有很多其他命令, 无法一一列举. 另外, shell 中有sed , awk 等高阶处理器, 后面有时间为大家介绍. 建议大家先查查资料.
作为一名架构师, 必须熟练掌握shell 编程技能. 是中高级开发者迈向架构师的必备技能. 希望能带来一些帮助.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值