Shell脚本:
shell是linux的内核解释器。
bourne shell 一般的.sh。sh\ksh\Bash\psh\zsh
C shell 一般用在BSD( BerkeleySoftwareDistribution)版的unix。csh\tcsh
vi /etc/shells 查看可以支持的shell版本
echo -e :支持反斜线转义符。\0nn八进制。\xhh十六进制。
vi helloworld.sh
#!/bin/bash
#The first program
#Author
echo -e "Hellow World"
中间有空格需要加引号,如果没有可以不加引号。如果加!,需要使用单引号。
运行shell脚本:
第一种:
chmod 755 helloword.sh
./helloword.sh
第二种:
bash helloword.sh
如果在Windows编辑后,需要在linux下再转,dos2unix,unix2dos。
history -cw 历史保存文件:清空历史,把缓存中的写入保存文件。保存文件:/home/.bash_history。
vim etc/profile来管理环境变量,hissize调整。!n重复执行第n条命令。
命令别名:alias 别名='原始名'
执行顺序:绝对路径或相对路径》执行别名》bash内部命令》环境变量(echo $path)
永久生效别名:vi /root/.bashrc 参考文件内例子
bash快捷键:ctrl+l 清屏幕;ctrl+u 删除或剪切光标之前的命令;ctrl+y 粘贴;ctrl+0退出当前终端;ctrl+r 查找历史命令,可以直接回车;
键盘:/dev/stdin 文件描述 0
显示器:/dev/sdtout 文件描述 1
错误输出显示器:/dev/sdterr 文件描述 2
输出重定向:命令>文件(覆盖)命令>>文件(追加)错误命令 2>文件
错误命令同时输出到文件:命令 >> 文件 2>&1;命令 &>>文件
错误命令分别输出到文件:命令 >>文件1 2>>文件2
不看到命令输出数据:命令 &>/dev/null
输入重定向:wc -cwl:统计字节数,统计单词数,统计行数。
命令 ; 命令:两个命令没有关系。
命令 && 命令:逻辑与。
命令 || 命令:逻辑或。命令1正确,或者命令2正确,就可以执行。
date ; dd if=输入文件 of=输出文件 bs=每次字节数 count=总共写多少个数 ; date:磁盘对拷命令。最后可以输出从开始到最后时间差。
命令1 | 命令2:命令1正确输出,作为命令2的操作对象。
| grep -inv :忽略大小写,输出行号,反向查找。
| grep --color=auto :输出颜色。
通配符:?匹配一个字符,*匹配多个字符,[]匹配中括号当中的一个字符,[-]匹配中括号当中的范围,[^]匹配中括号当中非字符。
rm -rf * 删除所在目录下所有文件。
ls ?ab 显示?ab文件。
位置参数变量和预定义变量都是较小不易更改的变量。
本地变量:
name="name"
aa=123
aa="$aa"456 or aa=${aa}456
echo $aa 打印123456
set 查看系统内所有变量
unset name 删除变量
设置环境变量:
csh #进入 c shell
exit #退出
bash #进入b shell
pstree #确定进程树
export 变量名=变量值 #申明变量
env #(environment)查看变量
unset 变量名 #删除变量
系统变量:
echo $PATH
PATH="$PATH":/root/sh #变量叠加,临时生效
echo $PS1 #显示系统提示符的变量[root@localhost src]#
位置参数变量
$n : $0是命令本身,$1-10是第一个到第九个参数,十以上的数字需要这么写${10}。
e.g :#!/bin/bash
echo $0 #本身
echo $1 #第一个参数
$*:代表命令中所有参数,只不过把所有参数看成一个,顺序循环一次。
$@:代表命令中所有参数,只不过把每个参数区分看,顺序循环多次。
e.g.:#!/bin/bash
for x in "$*"
do
echo $x
done
for y in "$@"
do
echo $y
done
$#:计算参数的个数
预定义变量
$?:判断上一个命令是否为0,如果不为0就是报错
$$:当前运行的进程号(PID)
$!:后台运行最后一个的进程号(PID)