$#:代表命令行参数个数
$*:代表所有参数
$n:第n个参数
$?:代表最后一个命令返回值
$$:代表当前shell的进程号PID
$是变量的引用符
= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
###字串长度
shell>> expr length "this is a test"
14
### 数字商数 模运算
shell>> expr 14 % 9
5
### 从位置处抓取字串
shell>> expr substr "this is a test" 3 5
is is
### 数字串 only the first character 字符e第一次出现在串的位置
shell>> expr index "testforthegame" e
2
declare 定义变量
declare -a array 数组
declare -i sum=10+20 整型
declare -x var 定义为环境变量
declare -r var=456 定义为只读的变量 不能用unset
read 命令:从键盘读入数据,赋值给变量;
-x read 时显示脚本执行的过程(用于调试) 执行脚本时也可加-x
-t read -t 2 tmp 2秒钟超时
-n read -n 3 tmp 读入3个字符自动返回
-p read -p "please input " <<====> echo -n "please input : "
-s read -p "please input :" -s passwd 以密码形式读入
echo 命令:
echo -n "hello world" 不输出回车符
echo -e "\033[31mking\033[0m" 支持终端控制码命令
m颜色属性
30--37前景色
40-----47 背景色
\033[0m恢复默认颜色属性
\033[45;36m设置背景为45前景为36
"\033[y;xH \033[10;25h" 把光标置于10行25列处
\033[K 清除光标行的内容
\033[u 恢复光标位
\033[s 保存当前光标位
test 与文件存在与否的判断
-e 是否存在
-f 是否为普通文件
-d 是否为目录
-s 是否为非空的文件
-p 是否为管道文件
-b 是否为块设备文件
-c 是否为字符设备文件
-L 是否为软链接
-S 是否Socket文件
与文件权限有关的判断
-r 是否有可读的权限
-w 是否有可写的权限
-x 是否有可执行权限
-u 是否有特权位
-g 是否有组特权位
-k 是否有t位,即粘贴位
两个文件的比较判断
-nt 比较file1比file2新
-ot 比较file1比file2旧
-ef 比较file1和file2是否为同一个文件,一般用于判断硬链接
整数之间的大小判断
-eq 相等
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
字符串之间的判断
-z 是否为空字符串
-n 是否为非空字符串
str1 = str2 是否相等
str1 != str2 是否不等
test -d file 测试是否为目录
test -e file 是否存在
test -s file 文件大小是否不为0
多重条件判断
-a 两个条件同时满足,就为真,相当于and
-o 两个条件满足其一,就为真,相当于or
------------------------------------------------------------------------------------
(()) 也可判断和test一样,可以直接使用比较符号,支持C语言格式
===================================
regular变量的特殊其它引用及处理方法
$var 引用var变量的值
${var} 引用var变量的值
${var%a*} 引用var变量的值并且截取a左边的字符串显示,如果字符串有多个a,则按从左向右最后一个a截取
${var%%a*} 引用var变量的值并且截取a左边的字符串显示,如果字符串有多个a,则按从左向右第一个a截取
${var#*a} 引用var变量的值并且截取a右边的字符串显示,如果字符串有多个a,则按从左向右第一个a截取
${var##*a} 引用var变量的值并且截取a右边的字符串显示,如果字符串有多个a,则按从左向右最后一个a截取
${var:3} 引用var变量的值并且从第3个字符开始截取
${var:3:6} 引用var变量的值并且从第3个字符开始截取,截取6个字符显示
${#var} 返回var变量值的长度
${var/a/b} 替换变量值的字符串,这里是把var变量值里的a换成b,如果有多个a也只能换一次
${var//a/b} 替换变量值的字符串,这里把var变量值里的a全换成b
if的各种形式
if test 6 -eq 5 -a 7 -gt 8
if [ 6 -eq 5 ] && [ 7 -gt 8 ]
if [ 6 -eq 6 -a 9 -gt 8 ]
if test 6 -eq 5
if ((6==5))
if test $score -lt 0 -o $score -gt 100小于0或者大于100
uid=$(id -u $name) #!!!!执行命令 id -u $name
#获取用户ID号,如果上条语句执行返回不等于0则用户不存在
if [ $? -ne 0 ]
#检查是否为整数
expr $num + 100 &> /dev/null
if [ $? -ne 0 ]
then
echo "input error!"
exit 1
fi
declare -i score //定义一个变量
read -p "input a int score:" score
len=${#num} //求变量的长度
expr length “this is a test” //求字符串长度
read -p "input a key:" :-n 1 key //-n表示位数
#产生1000以内的随机数
num=$(($RANDOM % 1000))
for i in `seq 0 $((len-1))`
do
n=${num:$i:1} //第二个参数代表从num的第几位开始取,第三个参数代表取多少位。例如123,从第0位取1位数即1
let "sum=sum+n"
done
#! /bin/bash
#
#1.判断某个文件是否存在,如果存在则判断是否为空文件 如果为空实现删除
#./xxx.sh /var/ftp/pub/ttt.txt
#
#判断传参是否正确
if [ $# -ne 1 ]
then
echo -e "\033[31muse:$0 filePath\033[0m"
exit 1
fi
#是否存在 '!'取假
fname=$1
if ! test -e $fname
then
echo -e "\033[31m$fname is not exist\033[0m"
exit 2
fi
#判度是否为普通文件
if [ -f $fname ] #if test -f $fname
then
#判断是否为空文件
if ! test -s $fname
then
rm -rf $fname
if [ $? -eq 0 ]
then
echo "$fname is empty file,del..."
fi
fi
else
echo "is not file!!!"
fi
exit 0
#! /bin/bash
#
#4.输入某个IP 并测试是否可一通信 如果能打印YES 否则NO
#
read -p "input a ip:" ip
#检查IP是否合法
#################
ping -c 1 $ip &> /dev/null
if [ $? -eq 0 ]
then
echo "Yes."
else
echo "NO."
fi
read -p "input a int number:" num
#检查输入是否合法
len=${#num}
for i in $(seq 0 $((len-1)))
do
n=${num:$i:1}
case $n in
[[:digit:]])
;;
*)
echo "input error!!!"
exit 1
;;
esac
done
echo "input success"
exit 0
//--------------------------------------------------------------------
shell的一些常用命令
ls (list)
=======================
1,作用:列出指定目录下的文件信息
2,用法:
ls ==> 列出当前目录中的文件名
ls dir/ ==> 列出指定目录dir/中的文件名
ls -l ==> 列出当前目录中的文件的详细信息
ls -a ==> 列出当前目录中的文件名(包括以.开头的隐藏文件)
man (manual)
=======================
1,作用:对相应的条目查找帮助
2,用法:
man ls ==> 查找关于ls的默认的帮助条目
man -f read ==> 列出所有关于read的帮助手册
man 3posix read ==> 查找在第三册手册中的关于read的帮助信息
注:下载完整的man帮助文档
sudo apt-get install manpages-posix manpages-posix-dev manpages-dev
cat / more / less
========================
1,作用:显示文本文件内容 / 分屏显示文件内容
2,用法:
cat file
more file
less file
rm (remove)
========================
1,作用:删除指定的文件 / 目录
2,用法:
rm file ==> 删除文件file
rm dir/ -r ==> 递归地删除目录dir/cd
cp (copy)
========================
1,作用:复制指定的文件 / 目录
2,用法:
cp file1 file2 ==> 将file1复制一份,并命名为file2
cp dir1/ dir2/ -r ==> 将dir1/递归地复制一份,并命名为dir2/
mv (move)
========================
1,作用:将一个指定的文件/目录移动到另一个地方
给一个文件/目录重命名
2,用法:
mv file dir/ ==> 将文件file移动到dir/中
mv file1 file2 ==> 将文件file1,重命名为file2
mv dir1/ dir2/ ==> 将目录dir1/,重命名为dir2/ (dir2/当前不存在)
mv dir1/ dir2/ ==> 将目录dir1/移动到dir2/中 (dir2/当前已存在)
注:
当mv的第二个参数是一个合法的已存在的目录时,那么就是移动,否则就是重命名。
cd (change directory)
=========================
1,作用:改变当前工作路径
2,用法:
cd dir/ ==> 将当前工作路径改为dir/
cd - ==> 将当前工作路径改为刚刚去过的目录
cd ==> 将当前工作路径改为家目录
find
=========================
1,作用:查找文件
2,用法:
find dir/ -name "xxx" ==> 在dir/查找名字为xxx的文件
find dir/ -name "*.c" ==> 在dir/查找后缀名是.c的文件
grep
=========================
1,作用:查找字符串
2,用法:
grep "apple" dir/ -Hrnw ==> 在dir/中,递归地(r)按照全字匹配(w)查找"apple"这个字符串,并且找到之后打印出其所在文件名字(H)以及行号(n)
head / tail
=========================
1,作用:查看一个文件的开头 / 结尾的若干行
2,用法:
head file -n 10 ==> 查看文件file的头10行
tail file -n 20 ==> 查看文件file的末20行
diff / patch
=========================
1,作用:产生补丁文件 / 打补丁
2,用法:
diff pro1.0 pro2.0 -urNB > 1.0.patch
==> 比较两个版本(时间差),将他们的差异按照标准补丁格式存放到1.0.patch当中。
patch -p0 < 1.0.patch
==> 将1.0.patch对当前目录(-p0)打补丁。
echo
=========================
1,作用:打印信息
2,用法:
echo "hello" ==> 打印hello
echo $PATH ==> 打印变量PATH的值
tar
=========================
1,作用:归档、压缩
2,用法:
tar czvf example.tar.gz file1 file2 dir1/ dir2/
==> 将file1 file2 dir1/ dir2/统统按照gzip格式压缩成example.tar.gz
tar -tf example.tar.gz ==> 查看压缩包example.tar.gz中有哪些文件
tar xzvf example.tar.gz ==> 将example.tar.gz中的文件解压到当前目录
tar xzvf example.tar.gz -C dir/ ==> 将example.tar.gz中的文件解压到dir/
注:
将以上命令中的'z'改成'j',那就是针对bzip2格式的命令,bzip2格式的压缩包的后缀是:
example.tar.bz2
ps (process state)
===========================
1,作用:查看当前瞬间系统各进程的信息
2,用法:
ps -ef
ps aux
ps ajx
kill
===========================
1,作用:给一个指定的进程,发送一个指定的信号
2,用法:
kill -l ==> 查看当前系统的所有信号
kill -s SIGKILL 1234 ==> 给进程号为1234的进程发送SIGKILL
kill -9 1234 ==> 给进程号为1234的进程发送9号信号(即SIGKILL)
killall process-name ==> 给进程名为process-name的进程发送SIGTERM
top
============================
1,作用:跟踪当前系统的进程信息
2,用法:
top ==> 跟踪系统所有进程的状态信息(使用<和>来翻页,使用q退出)
top -p 1234 ==> 跟踪进程号为1234的进程状态信息
df / du
=============================
1,作用:查看系统各个分区的详细信息 / 查看文件或目录的大小
2,用法:
df -h ==> 以人类看得懂的方式显示当前系统的各个分区情况
du -sh file ==> 显示文件file的大小
du -sh dir/ ==> 显示目录dir/的大小
一些特殊的文件:
. 当前目录
.. 上一级目录
../.. 上上级目录