shell学习笔记

`# 日 期 : 20191202

auother : qzk

修改内容 :

功能描述 : 此文档记录在使用shell时的注意事项,建议所有变量名用大写,多写注释。

####################################################################
set -u
在脚本中使用set -u可以运行脚本时把有错误的地方标示出来,并且不再执行后面的语句
set -e
若指令传回值不等于0,则立即退出shell.相当于脚本中的flag??
脚本调试相关:
sh -x zk.sh 调试脚本可以一行行打印出来执行结果
具体可以参考:https://www.cnblogs.com/faithfu/p/10715145.html 有详细说明
###########################################################################

Shell 是一个应用程序,它的一端连接着 Linux 内核,另一端连接着用户 ,一个 Shell 内置命令就是一个内部的函数,一个外部命令就是一个应用程序。
$$变量就可以获取当前进程的 PID
source 命令会强制执行脚本文件中的全部命令,而忽略脚本文件的权限
推荐给所有变量加上花括号{ },这是个良好的编程习惯
variable=value
variable=‘value’
variable=“value” 以单引号’'包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景
以双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义
我的建议:如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景

命令的结果赋值给变量
variable=command
variable= ( c o m m a n d ) 一 般 建 议 使 用 这 种 格 式 v a r i a b l e = " (command) 一般建议使用这种格式 variable=" (command)使variable="(command)" 定义变量时加双引号是最常见的使用场景
推荐给所有变量加上花括号{ },这是个良好的编程习惯 --------如 ${variable}
#################################################################################
shell中变量的作用域:
Shell 变量的作用域可以分为三种:
有的变量只能在函数内部使用,这叫做局部变量(local variable);
有的变量可以在当前 Shell 进程中使用,这叫做全局变量(global variable);
而有的变量还可以在子进程中使用,这叫做环境变量(environment variable)
所谓全局变量,就是指变量在当前的整个 Shell 进程中都有效。每个 Shell 进程都有自己的作用域,彼此之间互不影响。在 Shell 中定义的变量,默认就是全局变量
Shell 函数中定义的变量默认也是全局变量,要想变量的作用域仅限于函数内部,可以在定义时加上local命令,此时该变量就成了局部变量
全局变量只在当前 Shell 进程中有效,对其它 Shell 进程和子进程都无效。如果使用export命令将全局变量导出,那么它就在所有的子进程中也有效了,这称为“环境变量”。
shell 中的全局变量和局部变量
1.bash的变量默认都是全局变量,脚本内都可以调用,无论在什么位置(函数体中也一样),即函数体外可以调用函数体内的变量
2.local一般用于局部变量声明,多在函数体内使用
###################################################################################
字符串

KaTeX parse error: Expected '}', got '#' at position 2: {#̲string_name} …name $url" 字符串拼接,将两个字符串并排放在一起就能实现拼接
字符串截取:
1从指定位置开始截取
${string: start :length} string 是要截取的字符串,start 是起始位置(从左边开始,从 0 开始计数),length 是要截取的长度(省略的话表示直到字符串的末尾)
例子:
url=“c.biancheng.net”
echo ${url: 2: 9}
2从指定字符(子字符串)开始截取
${string#chars} string 表示要截取的字符,chars 是指定的字符(或者子字符串),截取右边字符
例子:
url=“http://c.biancheng.net/index.html”
echo ${url#
:}
结果为//c.biancheng.net/index.html
${string%chars*} 截取左边字符


Xargs实现的是将管道传输过来的stdin进行处理后,传递到命令的参数上。由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令.xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行
\ :脱意字符

;,&&,ll 三个指令均可以同时敲几个命令
用”;”时,不管command1是否执行成功都会执行command2; 使用”&&”时,只有command1执行成功后,command2才会执行,否则command2不执行;使用”||”时,command1执行成功后command2 不执行,否则去执行command2,总之command1和command2总有一条命令会执行

Shell 有 sh、bash、csh、tcsh、ash,Shell 既是一种脚本编程语言,也是一个连接内核和用户的软件。bash shell 是 Linux 的默认 shell
第一个脚本
##!/bin/bash
 #第一个脚本 
echo "第一个脚本"
 一个 Shell 内置命令(cp/mv...)就是一个内部的函数,一个外部命令就是一个应用程序
 echo 命令用来输出一个字符串。字符串是一组由" "包围起来的字符序列,echo 将第一个"作为字符串的开端,将第二个"作为字符串的结尾 ,注意中文,英文输入。
 source 是 Shell 内置命令的一种,它会读取脚本文件中的代码,并依次执行所有语句。你也可以理解为,source 命令会强制执行脚本文件中的全部命令,而忽略脚本文件的权限	
 推荐给所有变量加上花括号{ },加花括号是为了帮助解释器识别变量的边界。${xxx}zhukun和$xxxzhukun运行结果可是不一样。
 ee=ff 使用了=号就是对变量名ee赋值了ff,echo $ee 打印变量。使用变量时才能加$
 如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景
 在 Shell 中定义的变量,默认就是全局变量。
 字符串连接合并   格式:$name$url
 str2="$name $url"  #如果被双引号包围,那么中间可以有空格
 字符串截取   格式:${string: start :length}
 url="c.biancheng.net"
  echo ${url: 2: 9}   输出 biancheng
 
 特殊变量
 $n(n≥1)	传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2
 $#	传递给脚本或函数的参数个数
 使用 unset 命令可以删除变量。语法:
 unset variable_name
 Shell 变量的作用域可以分为三种:

有的变量只能在函数内部使用,这叫做局部变量(local variable);
有的变量可以在当前 Shell 进程中使用,这叫做全局变量(global variable);
而有的变量还可以在子进程中使用,这叫做环境变量(environment variable)

数组的定义
array_name数组名=(ele1元素 ele2元素 ele3 … elen)
nums=(29 100 13 8 91 44)
获取数组元素
a r r a y n a m e 数 组 名 [ i n d e x 下 标 ] 下 标 从 0 开 始 例 子 : n = {array_name数组名[index下标]} 下标从0开始 例子: n= arrayname[index]0n={nums[2]}
使用@或可以获取数组中的所有元素
${nums[
]}
${nums[@]}
获取数组长度:数组长度,就是数组元素的个数
KaTeX parse error: Expected '}', got '#' at position 2: {#̲array_name[@]}或…{#array_name[*]}
KaTeX parse error: Expected '}', got '#' at position 2: {#̲arr[2]} 获取 arr …{#string_name}字符串长度


数组拼接
array_new=(${array1[@]} a r r a y 2 [ @ ] ) a r r a y n e w = ( {array2[@]}) array_new=( array2[@])arraynew=({array1[]} ${array2[]})

alias 命令自定义别名
alias new_name=‘command’
alias cp=‘cp -i’
echo 是一个 Shell 内建命令,用来在终端输出字符串,并在最后默认加上换行符,echo 命令输出结束后默认会换行,如果不希望换行,可以加上-n.
#!/bin/bash
name=“Tom”
age=20
height=175
weight=62
echo -n "${name} is a g e y e a r s o l d ,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习Shell命令时,以下是一些重要的注意事项和学习建议: 1. 基本语法:Shell命令通常由命令名称和参数组成。命令名称是要执行的操作,而参数则提供了命令所需的信息。了解Shell命令的基本语法是学习的第一步。 2. 命令帮助:大多数Shell都提供了内置的命令帮助功能。通过使用命令后跟`--help`或`-h`选项,或者使用`man`命令(例如`man ls`)来获取有关特定命令的详细信息。 3. 常用命令:有一些常见的Shell命令对于日常使用非常有用。这些包括`cd`(更改目录)、`ls`(列出目录内容)、`mkdir`(创建目录)、`rm`(删除文件或目录)等。逐步学习和掌握这些命令是很重要的。 4. 管道和重定向:Shell命令非常强大,可以通过管道和重定向符号将多个命令组合在一起。了解如何使用管道(`|`)将一个命令的输出作为另一个命令的输入,并使用重定向符号(`>`、`>>`、`<`)来控制输入和输出。 5. 脚本编写:Shell脚本是一种将多个命令组合在一起以自动化任务的方法。学习如何编写简单的Shell脚本可以提高工作效率。 6. 实践和练习:最重要的是进行实践和练习。尝试使用不同的Shell命令来完成各种任务,并在实际场景应用所学知识。 记住,Shell命令的学习是一个逐步的过程。开始时可能会有些困惑,但随着实践和经验的积累,你会变得越来越熟练。希望这些提示对你有帮助!如有任何具体问题,随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值