我想在bash中检查文件是否包含特定字符串.我用过这个脚本,但它不起作用:
if [[ 'grep 'SomeString' $File' ]];then
# Some Actions
fi
Run Code Online (Sandbox Code Playgroud)
我的代码有什么问题?
我想编写一个bash函数来检查文件是否具有某些属性并返回true或false.然后我可以在我的脚本中使用它"if".但是我该怎么回事呢?
function myfun(){ ... return 0; else return 1; fi;}
Run Code Online (Sandbox Code Playgroud)
然后我像这样使用它:
if myfun filename.txt; then ...
Run Code Online (Sandbox Code Playgroud)
当然这不起作用.如何实现这一目标?
我想从shell脚本中调用的函数返回值.也许我错过了语法.我尝试使用全局变量.但这也行不通.代码是:
lockdir="somedir"
test() {
retval=""
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval="true"
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval="false"
fi
return retval
}
retval=test()
if [ "$retval" == "true" ]
then
echo "directory not created"
else
echo "directory already created"
fi
Run Code Online (Sandbox Code Playgroud) 我在UNIX中编写脚本,我必须检查字符串中的第一个字符是否为"/",如果是,则为branch.
例如,我有一个字符串:
/some/directory/file
Run Code Online (Sandbox Code Playgroud)
我希望这返回1,并且:
server@10.200.200.20:/some/directory/file
Run Code Online (Sandbox Code Playgroud)
返回0.
我想在git commit之前检查提交消息.我使用预提交钩子来做到这一点,但无法在.git/pre-commit脚本中找到获取提交消息的方法.我怎么能得到它?
我有一个bash脚本,它接受一个分支名称(例如,"master"或"feature/foo")或提交哈希(例如"1234abcd")的字符串.
我已经检出了存储库,所以我可以调用git.
确定字符串是分支名称还是提交哈希的最佳方法是什么?
#!/bin/bash
commit_or_branch="$1"
cd /path/to/my_repo
git fetch
if <is_branch $commit_or_branch>
then
echo "it's a branch"
else
echo "it's a commit"
fi
Run Code Online (Sandbox Code Playgroud) 为了使我的代码可移植,我尝试使用printf而不是echo.但是之后
printf "-dogs-cats"
Run Code Online (Sandbox Code Playgroud)
返回错误.本案的解决方法是:
printf "-";printf "dogs-cats"
Run Code Online (Sandbox Code Playgroud)
但是有一个通用的,可移植的命令(或一个选项printf),它将打印任意字符串作为文字/逐字,而不是尝试将字符串解释为格式?
我在BSD UNIX(在Mac上)工作,但我的目标是在其他UNIX风格中也可以使用的代码.
这是我试图在我的 bash 脚本之一中执行的操作。
如果SERVER_ENV不是PROD或TEST,则脚本必须退出。
check-server-env() {
local SERVER_ENV="$1"
if ! [[ "$SERVER_ENV"^^ =~ ^(TEST|PROD)$ ]]; then
error "$(highlight "$SERVER_ENV")" " does not exist."
echo "Exiting script..."
echo ""
exit 0
fi
}
Run Code Online (Sandbox Code Playgroud)
我打电话script.sh TEST
SERVER_ENV=$1
check-server-env $SERVER_ENV
Run Code Online (Sandbox Code Playgroud)
这是我打电话的方式。但它不起作用。我究竟做错了什么?
在bash脚本中,我需要检查字符串是否$HEADER以字符序列“ / *”开头。我正在尝试:
if [ $(echo $HEADER | cut -c 1-2) = '/*' ]
Run Code Online (Sandbox Code Playgroud)
它没有按预期工作。似乎将字符串与根目录的文件列表进行了比较。
如何保护从外壳解释的字符/和*?
用反斜杠保护字符也不起作用。