shell脚本的一些基本入门语法

$#:代表命令行参数个数

$*:代表所有参数

$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/的大小


一些特殊的文件:
.     当前目录
..    上一级目录
../.. 上上级目录

猜你喜欢

转载自blog.csdn.net/weixin_42116930/article/details/84537558