Linux c编程之脚本及常用命令

  脚本bash是一个命令处理器,能执行用户直接输入的命令。包括关键字、语法在内的基本特性全部是从sh借鉴过来的。
  bash可以从文件中读取命令, 这样的文件称为脚本。在实际使用中,为了解决重复输入各种命令的问题,将这些命令按一定顺序、或逻辑放在文本文件中,可以构成一个bash脚本, 还支持循环、函数、条件等编程。

一、脚本的使用

1.1 sh脚本的使用

方法一:

  1. 创建一个文本文件,如test.sh
    其中文件第一行必须是#!/bin/shtest.sh
#!/bin/sh
echo "hello world"
  1. 修改权限为可执行
   $ chmod +x test.sh
  1. 执行脚本
  $ ./test.sh 
hello world

方法二:

  1. 创建一个文本文件,如test.sh
    test.sh:
echo "hello world"
  1. 执行脚本
$ sh test.sh 
hello world

如果直接执行,则提示没有权限

$ ./test.sh
bash: ./test.sh: Permission denied

方法一中的脚本也可以用sh执行,如下:

$ sh test.sh 
hello world

1.2 bash脚本的使用

bash脚本语法基本同sh类似,最重要的地方是第一行由“#!/bin/sh”换为“#!/bin/bash.

1.3 作为系统命令使用

  脚本也可以不需要像上述方法一带路径执行,也不需要像方法二那样使用解释器执行。可以将有执行权限的脚本放到系统的/bin/或/usr/bin/目录下,像ls,mv等命令一样使用。

$ sudo mv test.sh /usr/bin/
$ test.sh 
hello world

二、脚本实例分析

2.1 参数使用

$ test.sh $1 $2 $3

$0: 脚本名
$0 $1 $N: (第几个)参数
$#: 参数个数
$@: 全部参数
∗ : 全部的参数,参数之间使用变量 *: 全部的参数,参数之间使用变量 :全部的参数,参数之间使用变量IFS值的第一个字符分隔,默认为空格,但是可以自定义
源码:
test.sh:

#!/bin/sh

echo '$0: '$0

echo '$#: '$#
echo '$1: '$1
echo '$2: '$2
echo '$@: '$@
echo '$*: '$*

测试:

$ sh test.sh a b 
$0: test.sh
$#: 2
$1: a
$2: b
$@: a b
$*: a b
$ ./test.sh a b 
$0: ./test.sh
$#: 2
$1: a
$2: b
$@: a b
$*: a b

2.2 循环for使用

test.sh:

#!/bin/bash

list="a b c"

for name in $list
do
    echo $name
done 

测试:

$ ./test.sh 
a
b
c

2.3 while使用

test.sh:

#!/bin/bash

cnt=5
i=0

while [[ $i -le $cnt ]];  
do  
    echo $i
    ((i++))  
done 

测试:

$ ./test.sh 
0
1
2
3
4
5

2.4 if条件使用

test.sh:

#!/bin/bash

echo "\$#: $#"

if [ $# -eq 1 ]
then
    echo "\$# == 1"
elif [ $# -gt 1 ]
then
    echo "\$# > 1"
else
    echo "\$# < 1"
fi
$ ./test.sh 1
$#: 1
$# == 1
$ ./test.sh 1 2$#: 2
$# > 1

常见if条件:

2.5 switch分支的使用

test.sh:

#!/bin/bash

case $1 in
"Apple")
        echo "It's Apple"
        ;;
"Android")
        echo "It's Android"
        ;;
    *)
        echo "unknown: $1"
        ;;
esac
$ ./test.sh Apple
It's Apple
$ ./test.sh banana
unknown: banana

2.6 函数的使用

test.sh:

#!/bin/bash

show_info()
{
    echo "show info: \$1: "$1
    echo "show info: \$2: "$2
}

case $1 in
"Apple")
        show_info "It's Apple""my Apple"
        ;;
"Android")
        show_info "It's Android""my Android"
        ;;
    *)
        echo "unknown: $1"
        ;;
esac
$ ./test.sh Apple
show info: $1: It's Apple
show info: $2: my Apple

2.7 IFS的使用

test.sh:
#!/bin/bash

echo " $@ : $@"
echo " $* : $*"
测试:

$ ./test.sh a b
$@ : a b
$* : a b

test.sh:
#!/bin/bash

IFS=‘|’

$ ./test.sh a b
$@ : a b
$* : a|b

三、常用命令行操作

3.1 拷贝文件scp

$scp  ./src_file root@192.168.0.5:/home/

3.2 查找文件

$ find  . -name \*.c
./server.c
./client.c

3.3 在文件中搜索

$ grep -nr "server_cmd_request_process" .
Binary file ./server_rcat matches
./server.c:22:int server_cmd_request_process(int task_id, int client_fd, cmd_hdr_t *cmd_hdr)
./server.c:100:            server_cmd_request_process(task_id, client_fd, cmd_hdr);
$ grep -nr "server_cmd_request_process" server.c
22:int server_cmd_request_process(int task_id, int client_fd, cmd_hdr_t *cmd_hdr)
100:            server_cmd_request_process(task_id, client_fd, cmd_hdr);

3.4 替换文件内容sed

使用sed命令可以替换文件中的内容

3.5 netstat

用于查看网络的连接情况,包括tcp、udp监听的端口和连接情况

3.6 ping/ping6

用于查看网络通断情况

3.7 man

用于linux系统查看函数API等

3.8 kill

通过进程号杀死程序

3.9 date

查看日期

3.10 cat

查看文件内容

3.11 压缩文件

tar -czf test.tar.gz 

3.12 列出压缩文件列表

tar -tzf test.tar.gz

3.13 解压文件

tar -xvzf test.tar.gz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪游东戴河

你就是这个世界的唯一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值