标签: bash

如何在bash脚本中转义"return"函数

下面的脚本将一堆csv文件加载到mysql数据库中.我试图在循环中执行此函数,但名为return的mysql表字段导致脚本认为它应该执行函数返回.

`around返回是为mysql转义它,它是一个mysql关键字.

for f in *.txt; 
do 
 mysql -uroot -ppassword -e "LOAD DATA INFILE '$f' INTO TABLE info FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (`return`,`id`,`field1`,`field2`);"; 
done
Run Code Online (Sandbox Code Playgroud)

mysql bash shell

5
推荐指数
1
解决办法
201
查看次数

如何使用awk将文件的某个字段更改为大写?

我有这样的文本文件:

1 http http 3 4 5 
2 dns dns 4 
3 ftp ftp 4 5 6 8 
Run Code Online (Sandbox Code Playgroud)

我希望输出如下:

1 HTTP http 3 4 5 
2 DNS dns 4 
3 FTP ftp 4 5 6 8 
Run Code Online (Sandbox Code Playgroud)

我想将第二个字段从小写改为大写,只改为第二个字段.

请注意,某行中的字段数不固定.

我可以使用这个目标awk吗?

linux bash awk

5
推荐指数
1
解决办法
5155
查看次数

Bash脚本对于两个但是相反的字符串测试都返回true

在我运行我输入的脚本之前

# export CPIC_MAX_CONV=500
Run Code Online (Sandbox Code Playgroud)

以下是test1.script文件

#!/bin/bash

function cpic () {
  var="`export | grep -i "CPIC_MAX_CONV" | awk '/CPIC_MAX_CONV/ { print $NF } '`"
  [[ $var=="" ]] && (echo "Empty String <<")
  [[ $var!="" ]] && (echo "$CPIC_MAX_CONV")
  echo "$var" ;
}

cpic
Run Code Online (Sandbox Code Playgroud)

输出是:

# test1.script  ---- Me running the file

Empty String <<
500
CPIC_MAX_CONV="500"
Run Code Online (Sandbox Code Playgroud)

无论我使用什么""或""或[或[结果是相同的.该CPIC_MAX_CONV变量由上述脚本找到.

我在Linux/CentOS 6.3上运行它.

这个想法很简单:找到是否CPIC_MAX_CONV在环境中定义并返回它的值.如果有空的空间,那么当然系统中不存在变量.

linux bash ubuntu boolean-logic centos

5
推荐指数
1
解决办法
818
查看次数

什么样的Android框架可用于将PC连接到Android和Android到其他PC?

我有这种情况.我在Android中使用bash/python编写一个应用程序.因此,通过PC我可以连接到Android和从Android使用USB我可以连接目标PC /服务器.

但是有什么API可用于将我的所有Android请求发送到USB,以便我可以通过Android远程获得服务器PC的帮助?有没有其他可用的开源框架这样做?

在此输入图像描述

要么

在此输入图像描述

跟进:

我的手机中已经有"Tet​​hering and portable hotspot"选项.无需安装任何第三方应用程序.

在此输入图像描述

所以,一旦我启用它,我有一个名为usb0的新界面,其IP地址位于Android + Laptop的同一子网中.

然后我在Android上安装简单的SSHDroid服务器,现在从3G我可以连接到Android.现在PC和Android都有usb0接口和相同的子网,用于共享解决所有远程访问问题的数据.

在我的笔记本上:

$ ip addr

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether d4:be:d9:55:91:4a brd ff:ff:ff:ff:ff:ff
        inet 192.168.0.219/24 brd 192.168.0.255 scope global eth0
        inet6 fe80::d6be:d9ff:fe55:914a/64 scope link 
           valid_lft forever preferred_lft forever

    7: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
        link/ether c6:8a:95:bf:fa:2b brd ff:ff:ff:ff:ff:ff
        inet 192.168.42.202/24 brd 192.168.42.255 scope global usb0
        inet6 fe80::c48a:95ff:febf:fa2b/64 scope link 
           valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)

在我的Android手机上:

/data/data/berserker.android.apps.sshdroid/home # …
Run Code Online (Sandbox Code Playgroud)

python linux bash android android-intent

5
推荐指数
1
解决办法
537
查看次数

在第一个命令中忽略$

如何$在第一个命令中编写Bash忽略的函数?我想要这个,因为有时当我从网上粘贴一个命令时,它包含一个$第一个字符.

$ ls应该做什么ls$ grep 'foo'应该做什么grep 'foo'.

这不起作用,因为$它不是有效的函数名称.

function $ {
   ...
} 
Run Code Online (Sandbox Code Playgroud)

bash terminal

5
推荐指数
1
解决办法
77
查看次数

Linux Bash - 日期格式

我的日期格式是yyyy-mm-dd-hh:mm:ss如何检查我的输入?

它应该是这样的:

#!/bin/bash

read -p "Date (format yy-mm-dd-HH-MM-SS): " input

check=$(date +"%Y-%m-%d-%H:%M:%S")

if [ $input -eq $check ]; do

     echo "Right!"

else
     echo "False!"

fi
Run Code Online (Sandbox Code Playgroud)

但这并没有检查日期它将我的输入与实际日期进行比较.

最好的问候文斯

linux bash shell formatting date

5
推荐指数
1
解决办法
3万
查看次数

使用bash进程替换拒绝文件描述符权限?

我有一个bash脚本,我想在标准输出中与用户通信,但也通过文件描述符将命令发送到子进程 - 如下所示:

# ...
# ...

echo "Hello user, behold a cleared gnuplot window"

# pass the string "clear" to gnuplot via file descriptor 3
echo "clear" >&3  
Run Code Online (Sandbox Code Playgroud)

所以我认为我可以通过首先启动子进程来"设置它":

#!/bin/bash

# Initiate(?) file descriptor 3, and let it direct to a newly 
# started gnuplot process:
exec >3 >( gnuplot )
Run Code Online (Sandbox Code Playgroud)

但这会产生错误:

/dev/fd/63: Permission denied
Run Code Online (Sandbox Code Playgroud)

这是预期的吗?

我不明白发生了什么.(我做错了什么?可能是我的系统有一些特殊的安全设置,不允许我正在尝试做什么?(运行Ubuntu Linux 12.10.))

"解决方法" - 以下似乎与我正在尝试的内容相同,并且可以正常工作:

#!/bin/bash

# open fd 3 and direct to where fd 1 directs to, i.e. std-out 
exec 3>&1 …
Run Code Online (Sandbox Code Playgroud)

bash file-descriptor permission-denied process-substitution

5
推荐指数
1
解决办法
3254
查看次数

Unix bash切割和grep

我有一个名为db.txt的文本文件.文件中的一些示例行如下:

哈利波特和魔法石:JK罗琳:21.95:100:200

哈利波特和密室:JK罗琳:21.95:150:300

指环王,戒指团契:JRR Tolkien:32.00:500:500

权力的游戏:George RR Martin:44.50:300:250

然后在我的脚本中,我有以下几行:

echo "Enter title:"
read TITLE

cut -d ":" -f 1 db.txt | grep -iw "$TITLE" | while read LINE
do
    STRING="`echo $LINE | cut -d ":" -f 1`,"
    STRING="$STRING `echo $LINE | cut -d ":" -f 2`, "
    STRING=" \$$STRING`echo $LINE | cut -d ":" -f 3`,"
    STRING=" $STRING`echo $LINE | cut -d ":" -f 4`,"
    STRING=" $STRING`echo $LINE | cut -d ":" -f 5`"
done
Run Code Online (Sandbox Code Playgroud)

有没有办法从剪切中获取特定字段然后将整行传递到while循环?

例如,如果我输入"哈利波特",它应该显示:

哈利波特和魔法石,JK罗琳,21.95美元,100,200美元

哈利波特和密室,JK罗琳,21.95美元,150美元,300美元

unix bash grep cut

5
推荐指数
1
解决办法
3884
查看次数

使用基于文件名的bash和Perl批量重命名文件

我正在寻找仅在当前目录中批量重命名文件并从文件名末尾删除某些字符串.

样品:

foo-bar-(ab-4529111094).txt
foo-bar-foo-bar-(ab-189534).txt
foo-bar-foo-bar-bar-(ab-24937932201).txt
Run Code Online (Sandbox Code Playgroud)

输出应如下所示:

foo-bar.txt
foo-bar-foo-bar.txt
foo-bar-foo-bar-bar.txt
Run Code Online (Sandbox Code Playgroud)

我想删除-(ab-2492201)每个文件名末尾的字符串,知道数字的长度可能会有所不同.

Perl正则表达式优于模块而不使用任何实用程序,并且对于bash oneliner命令是高度优选的.

如何在Linux上的Perl和Bash Shell中实现这一点?有兴趣知道两种解决方案.

regex linux bash shell perl

5
推荐指数
3
解决办法
5925
查看次数

Bash脚本 - 在变量中存储没有空格的find命令输出

我希望自动化我的xcode项目.除了带有空格的项目名称外,一切正常.我尝试了以下命令:

output_apps=`find ./ -name "*.app" -print`
output_apps=`find ./ -name "*.app"`
Run Code Online (Sandbox Code Playgroud)

我跑的时候

find ./ -name "*.app" -print 
Run Code Online (Sandbox Code Playgroud)

没有存储到变量,它给我输出如下所述的预期:

.//Ten EU.app
.//Ten Official App EU.app
.//Ten Official App.app
.//Ten.app
Run Code Online (Sandbox Code Playgroud)

但是,当我将上述命令的输出存储在变量中时,如下所示

output_apps=`find ./ -name "*.app" -print`
Run Code Online (Sandbox Code Playgroud)

然后运行以下for循环以获取名称

for curr_app in $o
do 
    echo "$curr_app"
done
Run Code Online (Sandbox Code Playgroud)

表明

.//Ten
EU.app
.//Ten
Official
App
EU.app
.//Ten
Official
App.app
.//Ten.app
Run Code Online (Sandbox Code Playgroud)

如何维护每个输出之间的空格并获得以下输出?

Ten EU.app
Ten Official App EU.app
Ten Official App.app
Ten.app
Run Code Online (Sandbox Code Playgroud)

bash

5
推荐指数
1
解决办法
2万
查看次数