我如何知道Bash中是否设置了变量?
例如,如何检查用户是否将第一个参数提供给函数?
function a {
# if $1 is set ?
}
Run Code Online (Sandbox Code Playgroud) 我一直试图弄清楚这有什么不对,但是无法弄清楚..
这部分似乎是一个错误..
elif [ $operation = "man" ]; then
if [ $aug1 = "add" ]; then # <- Line 75
echo "Man Page for: add"
echo ""
echo "Syntax: add [number 1] [number 2]"
echo ""
echo "Description:"
echo "Add two different numbers together."
echo ""
echo "Info:"
echo "Added in v1.0"
echo ""
elif [ -z $aug1 ]; then
echo "Please specify a command to read the man page."
else
echo "There is no manual page for that command." …Run Code Online (Sandbox Code Playgroud) 如果我想检查空字符串,我会这样做
[ -z $mystr ]
Run Code Online (Sandbox Code Playgroud)
但是,如果我想检查变量是否已定义呢?或者bash脚本没有区别?
我需要为给定的目录列表找到空目录.有些目录里面有目录.
如果内部目录也是空的,我可以说主目录是空的,否则它不是空的.
我该怎么测试呢?
例如:
A>A1(file1),A2 this is not empty beacuse of file1
B>B1(no file) this is empty
C>C1,C2 this is empty
Run Code Online (Sandbox Code Playgroud) 我正在编写一个脚本,需要检查特定提交是否是合并/恢复提交,我想知道是否有一个git技巧.
到目前为止我提出的(我绝对不想依赖于提交消息)是检查HASH^2并查看我是否没有收到错误,是否有更好的方法?
是否有if用于bash脚本的所有开关的列表?有时我看到有人使用它,我想知道他们正在使用的切换实际上是做什么的.
例子就是-z这一个.我知道如何使用它,但我不知道它是从哪里得到的.
if [ -z "$BASH_VERSION" ]; then
echo -e "Error: this script requires the BASH shell!"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
任何参考,指南,帖子,答案将不胜感激.
以下测试之间有什么区别吗?
[[ "$STRING" = "" ]] && exit 1;
[[ "x$STRING" = "x" ]] && exit 1;
[[ -z $STRING ]] && exit 1;
Run Code Online (Sandbox Code Playgroud) 从man test:
! EXPRESSION
EXPRESSION is false
Run Code Online (Sandbox Code Playgroud)
和
-n STRING
the length of STRING is nonzero
STRING equivalent to -n STRING
-z STRING
the length of STRING is zero
Run Code Online (Sandbox Code Playgroud)
因此与(上面明确指出的)[ "$x" ]具有相同的效果,并且隐式地与 具有相同的效果。那么,为什么人们会选择使用或者可以说其他形式更清晰呢?这只是个人喜好还是我错过了一个重要的区别?[ -n "$x" ][ ! "$x" ][ -z "$x" ]-n-z
我见过关于此的其他问题(例如这个问题),但没有什么可以确定它们是否在功能上相同。$x我确实想知道如果我使用-nor是否可以避免引用,-z但如果$x包含空格,则与其他方法一样会失败。
我有一个脚本如下:
#!/bin/bash
if [ -z "$1" ]; then
echo "Missing output folder name"
exit 1
fi
split -l 10000 --additional-suffix=.ordtmp orders.txt orders
for f in `ls *.ordtmp`; do
if [ "$2" == "local" ]; then
mv $f $1
else
hdfs dfs -copyFromLocal $f $1
rm -f $f
fi
sleep 3
done
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,出现以下错误:
(base) 01HW993798:ch06 tcssig$ ./splitAndSend.sh
Missing output folder name
Run Code Online (Sandbox Code Playgroud)
文件是否期望在运行时提及输出文件夹?
我尝试编写一个非常简单的 bash 脚本文件,名为bash_script.sh
#!/bin/bash
if [ -z $1 ];then
echo $1
else
echo 'no variable'
fi
Run Code Online (Sandbox Code Playgroud)
在终端中我尝试运行,./bash_script.sh hello但终端上的输出是no variable. 我在这里做错了什么?