目录
1.shell概述
1.1作为应用程序:
1.2 shell 作为一门语言
2.shell 语法
2.1 shell脚本的定义与执行
(1)新建文件
(2)程序开头第一行 必须写shell的类型
(3)程序编写完后,修改文件权限
(4)执行脚本文件
2.2 shell变量
2.2.1自定义变量
2.2.2 环境变量
2.2.2.1临时设置环境变量
2.2.2.2永久设置环境变量
2.2.2.3多个常用环境变量调用
2.2.3预设变量
2.2.4 变量的特殊用法:" " ` ` ' ' \ () {}
1.shell概述
1.1作为应用程序:


1.2 shell 作为一门语言
2.shell 语法
2.1 shell脚本的定义与执行
(1)新建文件
指定shell脚本文件,一般以.sh作为后缀名,也可以不加,例如:test.sh
(2)程序开头第一行 必须写shell的类型
#!/bin/bash # #!用于指定当前脚本文件的shell解释器的类型 (必须放在第一行),
# 如果不写,则用默认的shell
# 这是一个注释 # 注释以 `#` 开头#shell脚本是shell命令的有序集合,代码的构成就是命令
(3)程序编写完后,修改文件权限
chmod +x test.sh # 给test.sh加上可执行权限
chmod 777 test.sh # test.sh可读可写可执行
(4)执行脚本文件
2.2 shell变量
2.2.1自定义变量
(1)定义变量: num=1 #注意:变量等号两端不能有空格
#变量名只能包含英文字母下划线,不能以数字开头
(2)引用变量:num1=$num # 新变量=$旧变量名 注意:变量等号两端不能有空格
(3)输出变量:echo $num # 输出num变量的值
echo "Hello World" # 输出文本
(4)清除变量:unset num #清除变量
(5)变量的其它用法:
#!/bin/bash # 指定shell解释器(必须放在第一行)#定义变量
#shell脚本中没有数据类型可言,所以定义变量时不需要加数据类型
#shell脚本中,赋值操作时不能在等号两边加空格
#NUM = 1 #错误
NUM=6#引用变量
# $变量名 取一个变量的值
i=$NUM#输出变量
echo "NUM:"
echo $NUM
echo "i:"
echo $i#清除变量
unset NUM
echo "*************"
echo $NUMecho "开始 输入 str"
#使用read从终端读取数据保存在变量中
read str
echo "str = $str"#使用readonly创建一个只读的变量
readonly n=888
echo "n = $n"#指定变量初始化后不能再次修改变量的值,只能使用
#n=666
#echo "n = $n"
运行结果: 注意该shell程序执行,需要有可执行权限。
程序改权限:chmod 777 xx.sh # xx.sh可读可写可执行
2.2.2 环境变量
2.2.2.1临时设置环境变量


2.2.2.2永久设置环境变量
export MY_SHELL_NUM1



2.2.2.3多个常用环境变量调用
程序:
#!/bin/bash#PATH=$HOME/bin:/bin:/usr/bin;export PATHecho "You are welcome to use bash"
echo "Current work dirctory is $PWD"
echo "the host name is $HOSTNAME"
echo "your home dir $HOME"
echo "Your shell is $SHELL"
echo "user env val is $MY_SHELL_NUM1"
echo "系统路径: $PATH"
echo "---系统路径:--- "
echo $PATH | tr ':' '\n' # 按行显示,更易读
运行结果:
2.2.3预设变量
#! /bin/bash# 其中\为转义字符,让$0输入为字符,而不作为变量
#位置变量$0 - $9 保存从终端输入的每一个参数
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$4 = $4"
echo "\$5 = $5"
echo "\$6 = $6"
echo "\$7 = $7"
echo "\$8 = $8"
echo "\$9 = $9"
#如果超过9,需要加大括号
echo "\$10 = ${10}"
echo "\$11 = ${11}"echo " 传入的参数的个数,不包括\$0"
#$#:保存命令行传入的参数的个数,不包括$0
echo "\$# = $#"echo " 传入的参数的原内容,不包括\$0"
#$@或者$*:保存所有的命令行传入的参数,但是不包括$0
echo "\$@ = $@"
echo "\$* = $*"echo " 当前进程的进程号"
#$$:获取当前进程的进程号
echo "\$$ = $$"
#read NUM # 加入这个为了,再开一个终端验证进程号是否正确echo "执行ls获取当前目录下的内容,执行成功,则\$?的值为0,执行失败,则为非0"
# $? 返回上一个命令执行的结果,如果执行成功,则$?的值为0,执行失败,则为非0
ls
echo "\$? = $?"ls ABC
echo "\$? = $?"
运行结果:
2.2.4 变量的特殊用法:" " ` ` ' ' \ () {}
#!/bin/bashname="ASD"
#双引号里面的特殊字符,会使用其特殊含义
string1="good moring $name"
#单引号里面的特殊字符,都会失去特殊含义,保持原样输出
string2='good moring $name'echo $string1
echo $string2echo " pwd 引号 测试 "
#反引号:获取一个shell命令的输出结果,一般对有输出结果的命令经常去使用,
#也可以使用$()与反引号等价
echo "My dir is pwd"
echo "My dir is `pwd`"
echo 'My dir is `pwd`'
echo "My dir is $(pwd)" # 与echo "My dir is `pwd`" 等价echo " 转义字符 测试 "
#转义字符:使用时,需要在echo后面加上-e选项
echo "this \n is\ta\ntest" #保持原样输出
echo -e "this \n is\ta\ntest"echo " () {} 测试 "
num=333
#由 子shell 来完成,不影响当前shell中的变量
( num=999;echo "num1 $num" )
echo num1:$num#在 当前shell 中执行,会影响当前变量
{ num=666; echo "num2 $num"; }
echo num2:$num
运行结果: