首页 > 系统相关 >linux--shell

linux--shell

时间:2022-08-18 15:47:39浏览次数:78  
标签:shell 变量 -- echo 命令 sgz linux bash

shell的第一行一般都是#!开头指的是解释器,默认是

#!/bin/bash
#!/usr/bin/python

在路径下执行后缀.sh文件,需要加./,否者没有权限执行
解决方法1:在sh文件shebang中加入,#!/bin/bash
解决方法2:添加可执行权限给文件,chown +x 文件
解决办法3:直接执行解释器执行,/bin/bash xx.sh


bash

history命令
echo $HISTSIZE 
bash_history#存放历史记录的位置
存储的数量,默认是3000
-c 清除历史
-r 恢复历史
!历史id  ==>快速执行历史命令
!!==>执行上一次命令
\转义符号

bash内置命令


shell变量

shell是一种弱类型语言,无需声明变量类型,直接定义使用
变量类型,bash默认把所有的变量都认为是字符串
变量定义与赋值,变量与值之间不得有空格

注意:当你用bash/sh会开启一个子shell脚本,换个shell环境变量会发生改变,通过pstree可以查看。调用source或者点.符号,在当前shell环境加载加脚本,因此保留变量,变量会更改。

单引号变量不识别特殊符号
双引号变量能识别特殊符号


linux命令:

  1. echo $?#判断脚本是是否执行成功,成功返回的是0
  2. linux中反引中的命令执行结果会被保留下来 test=ls ==>$()
  3. wc -l 统计行数, wc -L 统计行数,找出最长那一行,输出元素个数。
  4. ps -ef 只能看一个进程的命令,ps -ef --forest可以看到子进程的内容

环境变量设置

环境变量一般是指用export内置命令导出的变量,用于定义shell的运行环境、保证shell命令的正确执行。shell通过环境变量确定登录的用户名、PATH路径、文件系统等各种应用。
环境变量可以在命令行中临时创建,但是用户退出shell终端,变量既丢失,如果永久生效,需要修改环境变量配置文件

用户个人配置文件 /.bash_profile、/.bashrc 远程登录用户特有文件
全局配置文件 /etc/profile 、 /etc/bashrc,且系统建设最好创建在/etc/profile.d/,而非直接修改主文件,修改全局配置文件,影响所有登录系统的用户。
优先级是个人的bash_profile最高,全局变量其次。

检查系统环境变量的命令

set,输出当前环境所有变量,包括全局变量、局部变量
env,只显示全局变量
declare,输出所有的变量,如同set
export,显示和设置环境变量值
unset,变量名,删除变量或函数,撤销环境变量
readonly,只有shell结束,只读变量失效 

环境变量文件加载顺序

特殊变量

[root@localhost test]# cat test01.sh 
#! /bin/bash

echo '特殊变量 $0 $1 $2 实践'
echo '结果' $0 $1 $2

echo '#########################'
echo '特殊变量$# 获取参数总个数'
echo '结果:' $#

echo '#########################'
echo '特殊变量$* '
echo '结果:' $*

echo '#################'
echo '特殊变量$@实践 '
echo '结果:' $@
__________________________________________________________
[root@localhost test]# bash test01.sh sgz sgz 180 182 180
特殊变量 $0 $1 $2 实践       #$0获取文件名字 $1 $2...获取对应的参数
结果 test01.sh sgz sgz
#########################
特殊变量$# 获取参数总个数     # $#获取参数数量
结果: 5
#########################
特殊变量$*                   #  $*获取参数
结果: sgz sgz 180 182 180
#################
特殊变量$@实践               #  $@获取参数
结果: sgz sgz 180 182 180
[root@localhost test]# 

$*和$@的区别
第一个是:"sgz 180 180"
第二个是:"sgz","180","180"

特殊状态变量
$?#判断脚本是是否执行成功,成功返回的是0
$$ 当前shell脚本的进程号
$!上一次后台进程的PID
$_在次之前执行的命令,最后一个参数

man bash 手册

脚本返回值

shell子串的花式用法(字符串的截取)



截取

从头截取到最近,从头截取到最尾

从后往前删除

利用反引号替换

for语句的基本语法

for number in {1...100}
do
  echo $number 
done

for num in {1..100};do echo $num ; done #写在一行的语法

seq生成序列的命令

seq 10 #默认是以换行作为分隔符

seq - s ":" 10 #修改默认分隔符

使用time计算出时间
time for n in {1..10000};do char='seq - s "sgzz" 100';echo ${#char} &>/opt/t1.txt;done
real 实际运行的时间
user 用户态执行的时间
sys 内核态执行的时间

time for n in {1..10000};do char='seq - s "sgzz" 100';echo ${char}|wc -L &>/opt/t1.txt;done

wc -L 执行时间需要40+s

[root@iZwz9257qzx65cidlm6w9eZ opt]# time for n in {1..10000};do char='seq - s "sgzz" 100';expr length ${char} &>/opt/t1.txt;done

expr length 相比管道符计算快

| awk也是相对较慢40+s

shell编程尽量使用内置操作和函数。效率相对比较高

变量的扩展语法

:-
:+
:?
:=


学习子的意义

创建进程列表(创建shell)

shell的进程列表理念,需要使用()小括号,如下执行方式就称为 进程列表(加上小括号就是开启子shell运行命令)

(cd~;pwd;ls;cd /tmp/;pwd;ls)

检测是否开启了子shell命令

#该变量的特点,如果是0就是在当前的shell环境中执行的,否则就是开辟子shell去运行的
BASH_SUBSHELL

#检测
cd ~;pwd;ls;cd /tmp/;pwd;ls;echo $BASH_SUBSHELL

#结果输出0 加上小括号输出1,几个小括号输出几

内置命令、外置命令

内置命令:在系统启动时就加载入内存,常驻内存,执行效率更高,但是占用资源。eg:cd、ls
外置命令:系统需要从硬盘中读取程序文件,再读入内存加载
type命令可以验证是内置还是外置

type ps

外置

内置
内置命令不会产生子进程去执行,内置命令和shell是为一体的,是shell一部分,不需要去单独读取某个文件,系统启动后,就会执行在内存了

#查看所有内置shell命令
compgen -b

好文:https://blog.csdn.net/w918589859/article/details/108752592?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166079933116782388091250%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166079933116782388091250&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-108752592-null-null.142v41pc_rank_34_queryrelevant25,185v2control&utm_term=shell%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187

标签:shell,变量,--,echo,命令,sgz,linux,bash
From: https://www.cnblogs.com/starSgz/p/16488087.html

相关文章

  • Visual Studio自定义背景图片
    首先先打开我们的VisualStudio然后点击[扩展]-----------[管理扩展]然后搜索[Claudia],点击[下载]按钮稍等一下这时候会提示我们重新启动重新启动后会这样,稍等一......
  • python中输出两条长度一致序列碱基不同的个数
     001、方法1root@PC1:/home/test#lstest.pyroot@PC1:/home/test#cattest.py##测试程序#!/usr/bin/pythonstr1="GAGCCTACTAACGGGAT"......
  • spring框架2:创建第一个spring项目
    创建hello_ssm工程,在工程中创建第一个模块hello_springFile-》new-》module,参照“spring框架1”“3.创建maven工程”,结果如下: 默认的目录结构和这个有差距,请参照上面的......
  • oracle 生成汉字字符串的拼音首字符
    CREATEORREPLACEFUNCTIONFUNC_GET_STRING_PY(strsvarchar2)returnvarchar2is/***********************************过程名称:FUNC_GET_STRING_PY功能:生成汉字字符串的......
  • code::blocks 编辑标签(editor tab)路径太长问题,修改后只显示文件名
    code::blocks安装后有一个比较烦人的问题,就是打开文件都是显示相对路径,导致文件多了路径太长,文件之间不好切换。 修改前:   修改后:   解决方案:Setting-......
  • Servlet特性研究之异步模式
    Servlet只有同步模型是怎样的?异步处理是Servlet3.0版本的重要功能之一,分析异步处理模型之前,先看看同步处理的过程是怎样的:客户端发起HTTP请求一个动态ServletAPI,请求......
  • 开启慢查询
    一、什么是慢查询慢查询,顾名思义,执行很慢的查询。有多慢?超过long_query_time参数设定的时间阈值(默认10s),就被认为是慢的,是需要优化的。慢查询被记录在慢查询日志里。慢查询......
  • 精选12份高级3D地图大屏模板(涵盖全国各地)
    在前几年,静态数据可视化是主流,一度占据了人们的视野,直到近几年来,随着云计算、物联网等高新技术的发展和应用,人们才开始逐渐接触动态的数据可视化。3D可视化更受大众所喜爱,......
  • 定制后的Antd弹窗无法关闭
    定制过prefixCls的Antd弹窗组件方法无法关闭最近项目中由于antd的PageHeader组件在页面跳转时报类似在卸载的组件中执行setstate操作,从头4.17.2升到最新4.22.......
  • YOLOX 0.1.0 环境配置
    YOLOX训练自己的数据集一、准备数据集配置好PascalVOC格式的数据集,放入datasets文件夹下,或者跟项目名在同一级目录下也行。VOC数据集的格式为:VOCdevkit |--VOC2007......