Shell基础
Posted yes5144
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell基础相关的知识,希望对你有一定的参考价值。
shell 编程
shell 通过提示你输入,向操作系统解释该输入。
格式如下
#!/bin/bash #固定格式,在第一行
系统变量
环境变量
$HOME 当前用户的登录子目录
$PATH 以冒号分隔的用来搜索的子目录清单
$PS1 命令行提示符,通常是“$”字符
$PS2 辅助提示符,用来提示后续输入,通常是“>”字符
$IFS 输入区的分隔符。当shell读取输入数据的时候会把一组字符看作是单词之间的分隔字符,他们通常是空格、制表符和换行符
$0 shell脚本程序的名字
$#
$$ 该shell脚本程序的进程ID,脚本程序一般会使用它来创建独一无二的临时文件,比如/tmp/tmpfile_$$
$1 第一个变量。相应的$2为第二个变量,依次类推。
$UID 当前用户的 ID
$PWD
shell 脚本中if还经常判断关于档案属性,比如判断是普通文件还是目录,判断文件是否有读写执行权限等。
常用的也就几个选项:
-e :判断文件或目录是否存在
-d :判断是不是目录,并是否存在
-f :判断是否是普通文件,并存在
-r :判断文档是否有读权限
-w :判断是否有写权限
-x :判断是否可执行
-eq # 等于
-ne # 不等于
-lt # 小于
-gt
-le
-ge # 大于等于
-a # and
-o # or
-z # 空字符串
find . -maxdepth 1 -name "*.sh" -exec tar czf sh_all.tar.gz \;
使用if判断时,具体格式为:
if [ -e $filename ] ; then
echo "$filename 存在"
else
echo "xxxxx"
fi
expr + - \* / %
echo `data + %Y%m%d`
echo `data + %Y-%m-%d`
echo -e "\033[32mthis is my test shell \033[0m"
ifconfig |grep "Bcast"| awk 'print $2' |sed 's/addr://g'
ll | awk 'print $9' | grep -v '^$' | head -1
cat test.txt | tr -d "\n"
cat test.txt | sed 's/^/& /' # 在每一行前添加一个空格
mysql备份脚本样例:
#!/bin/bash
# wuguangk
# backup mysql
#mysqldump -uroot -p123456 cacti >/tmp/backup/20170923/cacti.sql
BAKCMD=/usr/bin/mysqldump
DBUSER=root
DBPWD=
DATABASE=cacti
BAK_DIR=/data/backup/`date +%Y%m%d`
if [ ! -d $BAK_DIR ];then
mkdir -p $BAK_DIR
fi
if [ $UID -ne 0 ];then
echo 'this script must be runned by root'
exit
fi
echo "---------------"
echo
echo -e "\033[31m** begin to backup **\033[0m"
$BAKCMD -u$DBUSER -p$DBPWD $DATABASE >$BAK_DIR/$DATABASE.sql
if [ $? -eq 0 ];then
echo -e "\033[31m this backup mysql successfully !\033[0m"
else
echo -e "\033[42m failed to backup...\033[0m"
fi
find %BAK_DIR -mtime +30 -exec rm -rf \;
案例一:表达式判断
#!/bin/sh
NUM=100
if (( $SUM>4 ));then # 表达式中有 “运算符”时,用双括号
echo "this num is $NUM greater 4"
else
echo "wrong num"
fi
案例二:目录是否存在(注意,中括号之间必须有空格)
#!/bin/sh
#judge dir exist
if [ ! -d /data/20140515 ]; then
mkdir -p /data/20140515
else
echo "this dir is exist, Please exit……"
fi
案例三;
for i in `find . -maxdepth 1 -name "*.sh"`
do
echo $i; tar czf $i.tar.gz $i # 分别打包找到的文件
done
案例四;数组
#!/bin/bash
soft=(
nginx-1.6.1.tar.gz
mysql-5.1.17.tar.gz
php-5.3.3.tar.gz
/etc/sysctl.conf
)
echo "This soft total $$soft[0] !"
tar -xzf $soft[0];
cd nginx-1.6.1;
./configure
make && make install
read -p "please insert command: " cmd
以上是关于Shell基础的主要内容,如果未能解决你的问题,请参考以下文章