shell简介
shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
shell脚本创建
shell脚本的首行与命名
“#!/bin/bash”:#!不是注释,是指定该shell使用哪个程序解释执行。虽然在Linux中,文件不区分后缀。但是shell脚本发后缀为".sh"(见名知意)
shell的权限
刚创建的shell脚本没有执行(x)的权限(但是使用"2.3.2"和"2.3.3"的方式可以执行),必须使用"chmod"为该脚本添加权限(添加执行权限后,脚本会变成绿色)。
shell的执行命令(3种)
输入脚本的绝对路径或相对路径,如
[root@localhost tmp]# /tmp/helloworld.sh
[root@localhost tmp]# ./helloworld.sh
bash或sh +脚本,如
[root@localhost tmp]# bash /tmp/helloworld.sh
[root@localhost tmp]# sh helloworld.sh
在脚本的路径前再加". " 或source,如
[root@localhost tmp]# source /tmp/helloWorld.sh
[root@localhost tmp]# . ./helloworld.sh
注:第一种和第二种会新开一个bash,不同bash中的变量无法共享
shell注释
单行注释:以“#”开头的行就是注释,会被解释器忽略。
多行注释:使用“:<<任意符号a 注释内容 a”
shell中的变量
在bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
变量用等号连接值,等号左右两侧不能有空格。
变量的值如果有空格,需要使用单引号或者双引号包括。
在使用变量时,要在变量前加上"$",并且可以使用echo命令来查看变量值。
自定义的变量,只能在当前的shell环境(即同一个bash中)内可以使用。
shell中的临时变量
临时变量是指在用户在当前登陆环境生效的变量。用户登陆系统后,直接在命令行上定义的环境变量便只能在当前的登陆环境(即当前的bash,如果出现创建了bash(即在当前命令行中输入"bash"),就不能使用)中使用。当退出系统后,环境变量将不能下次登陆时继续使用。使用"set"命令可以显示所以的变量,使用"unset 变量名"命令可以删除指定变量。
但是如果将变量定义在配置文件中,就是永久存在的,在每次启动系统时,会自动加载出来,因为配置文件中的变量使用了"export"关键字,并且"export"也可以提升临时变量的作用域(当前shell以及所有的子shell)。
"/etc/profile"文件中是变量对所有用户生效;而" H O M E n a m e / . b a s h p r o f i l e " , 针 对 特 定 用 户 生 效 , HOME_name/.bash_profile",针对特定用户生效, HOMEname/.bashprofile",针对特定用户生效,HOME_name为用户的宿主目录,当用户登陆系统后,首先继承/etc/profile文件中的定义,再应用$HOME/.bash_profile文件中的定义。
shell中变量的赋值
定义变量时赋值
“变量=值”(等号两侧不能有空格)
将一个命令的执行的结果赋值给一个变量
1.使用反引号(即"~"按键)
A=ls -la
,运行里面的命令,并把结果返回给变量A
2.使用" ( ) " A = ()" A= ()"A=(ls -la)
3.将一个变量赋值给另一个变量
A=$STR
4.变量叠加
a=123;b="
a
"
456
;
c
=
a"456;c=
a"456;c={a}789
b的结果为"123456",c的结果为"123789"。
shell中常见的几种区别
shell中双引号和单引号的区别
单引号里的内容会全部输出,而双引号里的内容会有变化,因为单引号会将所有特殊字符脱意。
shell中 ( ) 和 ()和 ()和{}的区别
$( )的用途和反引号``一样,用来表示优先执行的命令,echo ( l s a . t x t ) ; (ls a.txt); (lsa.txt);{ } 就是取变量了 eg:echo ${PATH};
$((运算内容)) 适用于数值运算 ,echo $((3+1*4))
位置参数变量
“$n”:n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 9 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第9个参数,十以上的参数需要用大括号包含,如 9代表第一到第9个参数,十以上的参数需要用大括号包含,如{10};由于shell文件名也是一个实参(特殊的实参,即在显示所有参数内容时,他不显示),所以“ 0 ” 就 表 示 接 受 要 执 行 的 文 件 名 ( 参 数 个 数 从 0 开 始 ) 。 " 0”就表示接受要执行的文件名(参数个数从0开始)。 " 0”就表示接受要执行的文件名(参数个数从0开始)。"*":代表命令行中所有的参数,当加上" “” “时,把所有的参数看成一个整体。以”$1 $2 … $n"的形式输出所有参数,当没有加" “” “时,以”$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。
“$@”:代表命令行中的所有参数,始终把每个参数区分对待。以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。
"KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲":代表命令行中所有参数的个数…# 的值减1,用于分别处理每个参数,移出去的参数不再可用。
预定义变量
“ ? " : 返 回 执 行 上 一 个 命 令 的 状 态 值 执 行 成 功 , 返 回 0 , 执 行 失 败 , 返 回 非 0 ( 具 体 数 字 由 命 令 决 定 ) 。 " ? ":返回执行上一个命令的状态值 执行成功,返回0,执行失败,返回非0(具体数字由命令决定)。 " ?":返回执行上一个命令的状态值执行成功,返回0,执行失败,返回非0(具体数字由命令决定)。" " : 当 前 进 程 的 进 程 号 ( P I D ) , 即 当 前 脚 本 执 行 时 生 成 的 进 程 号 。 " ":当前进程的进程号(PID),即当前脚本执行时生成的进程号。 " ":当前进程的进程号(PID),即当前脚本执行时生成的进程号。"!”:后台运行的最后一个进程的进程号(PID),最近一个被放入后台执行的进程("&"表示在后台执行)。