shell:
shell是一个在操作系统之上的软件,linux登录后默认就进入这个软件 shell是一个命令的解释器,能解析用户所输入的命令 (ls cp rm pwd 等等) shell拥有自己内建的命令集
bash
bash(Bourne Again shell )是shell的扩展,并且完全兼容shell(类似vim与vi的关系)
第一个shell脚本
第一步:使用文本编辑器(vim)来创建文本文件(一般以.sh结尾)
第一行必须包括shell声明:#!
#!/bin/bash (告诉系统执行的时候要调用什么解释器)
#开头的是shell的注释
第二步:输入命令 echo “hello world”
第三步:给文件添加执行权限 chmod 755 hello.sh
第四步 运行脚本
第一种方式:指定脚本的绝对或相对路径来运行 ./hello.sh
第二种方式:直接运行解释器,将脚本作为参数运行 sh hello.sh
常见问题 -bash: ./hello.sh: Permission denied 没有赋予执行权限
shell变量/赋值
变量:
变量以字母或者下划线开头,后面接任意长度的字母、数字和下划线,如 var=linux 变量的引用需要在前面加$符号 ,
如echo “$var” 如果变量的值中间有空格,需要用双引号引起来,如var=“hello world”
单双引号区别:
单引号变量不解析
双引号变量可以解析
特殊变量:
位置参数 $n ,n为数字
$0为命令本身
$1-$9是命令行第一道第9个参数
$* 代表所有参数
$# 代表参数的个数
$? 代表上一个命令的返回状态
命令替换和赋值
命令替换的格式: $(cmd) 或者 cmd
# ``为tab上的反引号
在执行命令的时候,会先将$(cmd) 或者 cmd
里的命令先执行一遍,再将结果返回到原来的命令中
var=$(uname -a) echo $var
命令替换和管道的区别?
命令替换是将一个命令的输出作为另外一个命令的参数,而管道是将命令的输出作为下一个命令的标准输入
如 date +%Y|touch touch $(date +%Y)
算数运算和赋值
eg: echo 1+2,没有输出3。因为shell需要特殊的格式来进行算数运算
方式一 ((i=$j+$k))
方式二 let i=$j+$k
赋值
var=$(($i+$j))
echo $var
示例:
sh lufei.sh ni(位置参数)
lufei.sh:
#!/bin/bash
echo $1
echo $(id) id的执行结果作为echo的参数
echo `id` 反引号,在esc按键下方, 跟上面一样
多个命令分隔符
分号(;)是shell的命令分隔符, 让同一行的命令能够顺序执行。如echo 1 ;echo 2
课上小例子
1、命令行输入2个数字,写个小程序,计算2个数字的和,并输出结果
2、命令行输入2个文件,写个小程序,把这两个文件都拷贝到以年月日命名的目录下,并输出每次拷贝的执行结果 date +%Y%m%d
1.
#!/bin/bash
let sum=$1+$2
echo $sum
2.
#!/bin/bash
file1=$1
file2=$2
dir=`date +%Y%m%d`
mkdir $dir
cp $file1 $dir&&echo $?
cp $file2 $dir&&echo $?