Shell编程笔记(三)

Shell脚本编写

1 自动设置ip

静态ip:

auto eth0
iface eth0 inet static
	address 192.168.1.111
	netmask 255.255.255.0
	gateway 192.168.1.1

动态ip:

auto eth0
iface eth0 inet dhcp

热插拔:

allow-hotplug eth0

若开发板要配置多个静态ip,则将eth0设置为auto,其它eth1以后的设置为allow-hotplug模式。这样能实现多个静态ip和wifi共存,wifi可以连接网络并进行操作。

在Ubuntu中配置静态IP

#保存该文件并退出。 然后使用以下netplan命令应用最近的网络更改
sudo netplan apply

2 start、stop、restart

这里给一个编写应用程序的start、stop、restart等操作的模板

#!/bin/sh
BASE_HOME=/home/apple/test
PID=${BASE_HOME}/.pid
status(){
    
    
   echo "==========status======="
}

start() {
    
    
    echo "==========start===========";
}

stop() {
    
    
    echo "===========stop============";
}

restart() {
    
    
    stop;
    echo "sleeping.........";
    sleep 3;
    start;

}
case "$1" in
    'start')
        start
        ;;
    'stop')
        stop
        ;;
    'status')
        status
        ;;
    'restart')
        restart
        ;;
    *)
    echo "usage: $0 {start|stop|restart|status}"
    exit 1
        ;;
    esac
#!/bin/bash
now=$(date +%Y%m%d)
command='java -Xms128m -Xmx2048m -jar dcheck.jar'
log_file_url="/${now}_dm.log"
 
start(){
    
    
    if [ "$log_file_url" != "" ]; then
        exec $command  > "$log_file_url" &
    else
        exec $command &
    fi
}
 
stop(){
    
      
 ps -ef | grep "$command" | awk '{print $2}' | while read pid  
 do 
    C_PID=$(ps --no-heading $pid | wc -l)
    echo "当前PID=$pid"
    if [ "$C_PID" == "1" ]; then
        echo "PID=$pid 准备结束"
        kill -9 $pid
        echo "PID=$pid 已经结束"
    else
        echo "PID=$pid 不存在"
    fi 
 done  
}
 
case "$1" in  
start)  
start  
;;  
stop)  
stop  
;;    
restart)  
stop  
start  
;;  
*)  
printf 'Usage: %s {start|stop|restart}\n' "$prog"  
exit 1  
;;  
esac

3 Shell中定义变量用双引号和单引号以及不用引号的区别

不使用引号定义字符串时,字符串不能包含空白字符(如Space或Tab),需要加引号,一般连续的字符串,数字,路径等可以不加引号。如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容。

3.1 单引号

单引号定义字符串所见即所得,即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。单引号是全引用,被单引号括起的内容不管是常量还是变量都不会发生替换。

#输入
var=dablelv
echo '$var'

#输出结果
$var
3.2 双引号

双引号引用的内容,所见非所得。如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容。双引号是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容。

#输入
var=dablelv
echo$var"

#输出结果
dablelv
3.3 不使用引号

用于一些简单字符数字的定义与双引号类似

使用规则 解释
单引号 所见即所得,即输出时会将单引号内的所有內容都原样输出,或者描述为单引号里面看到的是什么就会输出什么,这称为强引用
双引号 (默认) 输出双引号内的所有内容;如果内容中有命令(要反引下)、变量、特殊转义符等,会先把变量、命令、转义字符解析出结果,然后再输出最终内容,推荐使用,这称为弱引用
无引号 赋值时,如果变量内容中有空格,则会造成赋值不完整。而在输出内容时,会将含有空格的字符串视为一个整体来输出;如果内容中有命令(要反引下)、变量等,则会先把变量、命令解析出结果,然后输出最终内容;如果字符串中带有空格等特殊字符,则有可能无法完整地输出,因此需要双引号替代无引号的情况,特别是对变量赋值时改加双引号。一般连续的字符串、数字、路径等可以不加任何引号进行赋值和输输出,不过最好是用用
反引号 一般用于引用命令,执行的时候命令会被执行,相当于S0,赋值和输出都要用“将命令引起来

4 Shell中在可执行程序或者脚本文件后面添加&作用

添加 &与不添加&的区别:

 ./testpro &

添加&运行后,在当前终端可以继续执行其他的命令,也可以使用ctrl +c 命令,都不会对后台的testpro命令造成影响。

未添加&运行时,在卡在当前的可执行程序位置,如果此时使用ctrl +c 会终止当前进程,当然也不能再执行其他命令了。

即使添加了& ,当关闭当前终端后,进程也会退出运行,此时通过ps 命令查看没有对应的进程。

总结:

在添加了&只是解放了当前终端,可以在当前终端执行其他命令;但是关闭了当前终端,进程仍会退出但是,添加&是个好习惯。

猜你喜欢

转载自blog.csdn.net/WalterBrien/article/details/125839707
今日推荐