Shell指南
shell是一个命令解释器
应用-shell-内核-硬件
shell为用户提供了一个想linux内核发送请求以便运行程序的程序
用户可以使用shell启动,挂起,停止,编写一些程序
shell分为两种
交互式
用户每输入一条命令就执行
批处理
执行一个shell脚本
编写一个shell
1 2
| !#/bin/bash echo "hello,world"
|
1 2
| chmod 744 文件名.sh ./文件名.sh *运行
|
shell变量
转义符
当你想要输出的内容中包含shell的已经被定义的特殊符号时,为了避免输出的内容被干扰,需要使用转义符把字符去特殊化
参数 |
说明 |
\ |
使\后的一个变量变为单纯的字符串 |
‘ ‘ |
把其中所有的变量转为字符串 |
“ “ |
保留其中变量的属性,不做转移处理 |
` ` |
把其中的命令执行后返回结果 |
定义一个变量

取消一个变量
1 2 3 4
| A=200 echo "A=$A" unset A echo "A=$A"
|

静态变量
1 2 3 4
| readonly A=200 echo "A=$A" unset A echo "A=$A"
|

无法unset静态变量
全局环境变量
查看所有变量
设置一个全局环境变量
可供其他shell使用
在/etc/profile 文件中定义一个环境变量
1 2 3 4
| vim /etc/profile 环境变量名称=位置 export 环境变量名称 :wq
|
让环境变量生效
接着便可以在shell脚本中使用该环境变量
将命令的返回值赋给变量
1 2
| A=`命令` *使用反引号 A=$(命令) *同理于反引号
|
1 2 3 4
| A=`ls -l /root` echo $A B=$(date) echo $B
|
希望获取到命令行的参数信息,便可以使用到位置参数变量
1 2 3 4
| $n *n未数字,代表获取命令行的第几个数字,如果获取到数字是两位数,则需要${10} $0代表命令本身 $ $* *这个命令行终端所有参数,但$*把所有参数看作一个整体 $@ *显示命令行的所有参数,但是每一个参数区分对待
|
1 2 3 4 5
| echo "$1 $2" echo "" echo "$*" echo "" echo "$@"
|

预定义变量
1 2 3
| $$ 显示当前进程号的PID $! 后台运行的最后一个进程的进程号 $? 最后一次执行命令的状态 0成功 非零可能失败
|


运算符
1
| `expr m + n` *运算符中间需要空格隔开
|
条件判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| ------------字符串比较 -lt *小于 -le *小于等于 -eq *等于 -ge *大于等于 -ne *不等于 if [ "ok -eq ok" ] then echo "1" fi ------------按照文件权限进行判断 -r *读的权限 -w *写的权限 -x *执行的权限 ------------按照文件类型进行判断 -f *文件存在并且是一个常规的文件 -e *该文件存在 -d *文件存在并是一个目录 if [ -e /root/a.txt ] then echo '1' fi
|
1
| [ 条件 ] *中括号里放置条件,在条件前后需要使用空格进行隔开
|
流程控制
if
1 2 3 4 5 6 7 8
| A=100 if [ $A -ge 60 ] then echo "及格" elif [ $A -lt 60 ] then echo "不及格" fi
|
case
1 2 3 4 5 6 7 8
| case $1 in "1") *如果输入为1,执行下面的语句 echo "monday" "2") *如果输入为2,执行下面的语句,以此类推 echo "thusday" *) *如果都不是,执行下面的语句 echo "other" esac
|
for
有两种格式
第一种
1 2 3 4 5 6
| sum=0 for((i=1;i<=100;i++)) do sum=$[$sum+$i] done echo "sum=$sum"
|

第二种
1 2 3 4
| for i in "$*" do echo "$*" *由于@是当成一个参数读出,所以指挥输出一次。可对比$@ done
|
while
1 2 3 4
| while [ 判断语句 ] do 循环执行 done
|
read
可以用于读取控制台的输入(从控制台输入到程序中
1
| read -p -t 时间秒数 "提示" 变量名称
|
1 2 3 4
| read -p "输入A的值" A echo "A的值为$A" read -t 5-p "五秒内输入B的值" B echo "B的值为$B"
|

函数
系统函数
basename
返回最后的文件名

dirname
返回路径

自定义函数
1 2 3 4
| function 函数名(){ 内容 } 函数名 变量
|
1 2 3 4 5 6 7
| function getsum(){ SUM=$[$n1+$n2] echo "SUM=$SUM" } read -p "n1:" n1 read -p "n2:" n2 getsum $n1 $n2
|