shell脚本
符号:
* 通配符
? 单个任意字符
~ 宿主目录
&& 连接符,前一个成功了后面一个才执行
| 管道符,前者的输出作为后者的输入
|| 或,只要其中一个通过,整个式子通过
\ 换行符,在命令中,表示命令未打完,下一行接着打,在编码中,可转义,如:\n,\t
; 连接,如:cd /tmp;ls 表示进入tmp目录中后,查看
{} 展开,如:mkdir file{1..10},会创建file1,file2,file3,。。。file10个文件夹
[] 连续的范围,如:grep [a-z] /tmp/a.txt
"" 字符串,但是可以获取变量
'' 字符串,字符
`` 括起来的东西可以当做命令来执行,~号
--------------------------------------------
变量
自定义变量
系统变量
自定义变量:
如:
a="helloworld"
echo "$a"
ip=192.168.18.105
ping -c 4 $ip
交互式获取变量:read -p "please input a name" name
echo "$name"
变量不能是数字
系统变量:(又称为内部变量,变量名都是大写)
$HOME
$HOSTNAME
$PWD
$PID
$PATH等
echo $PATH 命令的搜索路径
PATH=$PATH:/vfast 这样/vfast中的文件在其他路径下就可以直接使用,把/vfast提升到系统变量搜索中
-----------------
A=apple
B=bnanana
echo $A.$B 只适用与当前环境,换个shell就不能识别出来
如果 export A,新打开一个shell就会识别a,把它提升为环境变量,与这个shell平级的shell不能识别,但是他的子shell可以识别
------------------------------------------
变量符号:
$0 : 脚本名称
$1 : 第一个参数的名字
$2 : 第二个参数的名字
。。。
$10 : 第10个参数的名字。注意:${10}要括号括起来,否则会识别为1,0
$# : 未知参数的个数
$$ : 脚本执行时候pid号是多少,进程号,因为脚本执行完之后,ps aux查看时候是不显示的
$@ : 未知参数的列表
$? : 返回值
0:表示成功
非0:表示失败,常见的非0值,127命令未找到,126:没有权限
-----------------------------------
脚本的写法:
后缀名一般以 .sh .c .py 结尾
书写规范:
#!/bin/bash 定义开头指定的运行环境
# 说明脚本的作用,介绍
定义变量
函数
主程序
---------------------------
脚本的执行:
需要拥有x权限,拒绝777
有两种执行方式:
sh x.sh 在原来shell基础上又开启了一个新的shell,执行,输出,又返回到原来的shell
source x.sh 在当前shell执行,当前shell输出
-----------------------------
echo指令的简单使用:
echo -n 不换行
-e 解释转义字符
\t tab制表符
\n 换行,回车
\b 删除前一个字符
\a 提示音
常用颜色
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m
等
------------------------------------------------
输入输出重定向
> >> < <<
passwd zhangsan --stdin <pass.txt 重定向输入源,pass。txt中写入密码,就会把张三的密码改变
< 表示重定向输入, > 表示输出
<< 重定向追加输入 >> 重定向追加输出到
head -1 /etc/rc.d/* >/vfast/a.txt 2>/vfast/error.txt 2表示错误输出,正确输入,放到/vfast/a.txt 错误输出。放到/vfast/error.txt
head -1 /etc/rc.d/* $>/vfast/a.txt 2>/vfast/a.txt