我的脚本出现语法错误,我确信我已经设置了逻辑,但似乎遇到了脚本格式化的问题。
预期的工作流程是
如果n =((sum)+(产品))则打印n和n ++重复。 否则n ++重复。
public class MenuListFragment extends Fragment {
private ImageView ivMenuUserProfilePhoto;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_menu, container,
false);
ivMenuUserProfilePhoto = (ImageView) view.findViewById(R.id.ivMenuUserProfilePhoto);
NavigationView vNavigation = (NavigationView) view.findViewById(R.id.vNavigation);
vNavigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
//Toast.makeText(getActivity(),menuItem.getTitle(),Toast.LENGTH_SHORT).show();
// here is where I need to reload the tab from, and pass the the "cat" value
return false;
}
}) ;
setupHeader();
return view ;
}
private void setupHeader() {
int avatarSize = 20;
String profilePhoto = "";
}
}
答案 0 :(得分:1)
((expression))
将执行算术运算,但不会返回任何内容,因此无效:
# INVALID SYNTAX
if [ $n = (($my_prod + $my_sum)) ]
此外,=
会比较字符串,因此01 = 1
会返回false。首选==
或-eq
。总而言之,这就是你想要的:
if [ $n -eq $(($my_prod + $my_sum)) ]
(我没有检查过其他行,但是shellcheck是你的朋友。)
编辑:借鉴评论,这也很好:
if (( n == $((my_prod + my_sum)) ))
答案 1 :(得分:1)
继续我的评论,在您运行shell检查并且没有错误之后,您仍然必须修复n++
,这本身就是一个错误。要增加n
,请使用((n++))
。
在my_prod
循环的每次迭代中,您也没有更新my_sum
和while
。您对n == $((my_prod + my_sum))
的比较是可疑的。我怀疑你在if ((my_prod == my_sum))
之后。这样您就可以比较产品和说22
的数字之和是否相等(例如2+2 = 2*2
)。纠正这些将允许您的代码进行我认为您正在追求的比较,例如
n=0
while [ $n -le 30 ];
do
my_prod=$(prod $n)
my_sum=$(sum $n)
printf "n(%2d) - prod: %3d, sum: %3d" "$n" "$my_prod" "$my_sum"
if ((my_prod == my_sum))
then
# echo "$n -> product ($my_prod) == sum ($my_sum)"
printf " -> (%3d == %3d)" "$my_prod" "$my_sum"
fi
printf "\n"
((n++))
done
您可以清除prod
和sum
,类似于以下内容。 注意以避免在循环中调用实用程序(例如cut
等),这会生成单独的子进程,您可以简单地使用mod, divide by 10
逻辑来分解prod()
和sum()
中的数字,例如
sum() {
local len=${#1}
local res=0
local n=$1
local res=0
while [ $n -gt 0 ]
do
local sdigit=$(( n % 10 ))
local n=$(( n / 10 ))
local res=$(( res + sdigit ))
done
echo $res
}
prod() {
local len=${#1}
local res=1
local n=$1
while [ $n -gt 0 ]
do
local sdigit=$(( n % 10 ))
local n=$(( n / 10 ))
local res=$(( res * sdigit ))
done
echo $res
}
注意:如果使用类似bash的shell支持字符串索引,则可以进一步将prod()
和sum()
缩减为:
sum() {
[ -z "$1" ] && {
echo 0
return 1
}
echo $(($1 + $1))
}
prod() {
[ -z "$1" ] && {
echo 0
return 1
}
echo $(($1 * $1))
}
将这些部分放在一起,你可以做类似以下的事情:
#!/bin/bash
sum() {
local len=${#1}
local res=0
local n=$1
local res=0
while [ $n -gt 0 ]
do
local sdigit=$(( n % 10 ))
local n=$(( n / 10 ))
local res=$(( res + sdigit ))
done
echo $res
}
prod() {
local len=${#1}
local res=1
local n=$1
while [ $n -gt 0 ]
do
local sdigit=$(( n % 10 ))
local n=$(( n / 10 ))
local res=$(( res * sdigit ))
done
echo $res
}
n=0
while [ $n -le 30 ];
do
my_prod=$(prod $n)
my_sum=$(sum $n)
printf "n(%2d) - prod: %3d, sum: %3d" "$n" "$my_prod" "$my_sum"
if ((my_prod == my_sum))
then
printf " -> (%3d == %3d)" "$my_prod" "$my_sum"
fi
printf "\n"
((n++))
done
示例使用/输出
查找0-30
之间的分解数字的那些产品和总和:
$ bash prodsum.sh
n( 0) - prod: 0, sum: 0 -> ( 0 == 0)
n( 1) - prod: 1, sum: 1 -> ( 1 == 1)
n( 2) - prod: 2, sum: 2 -> ( 2 == 2)
n( 3) - prod: 3, sum: 3 -> ( 3 == 3)
n( 4) - prod: 4, sum: 4 -> ( 4 == 4)
n( 5) - prod: 5, sum: 5 -> ( 5 == 5)
n( 6) - prod: 6, sum: 6 -> ( 6 == 6)
n( 7) - prod: 7, sum: 7 -> ( 7 == 7)
n( 8) - prod: 8, sum: 8 -> ( 8 == 8)
n( 9) - prod: 9, sum: 9 -> ( 9 == 9)
n(10) - prod: 0, sum: 1
n(11) - prod: 1, sum: 2
n(12) - prod: 2, sum: 3
n(13) - prod: 3, sum: 4
n(14) - prod: 4, sum: 5
n(15) - prod: 5, sum: 6
n(16) - prod: 6, sum: 7
n(17) - prod: 7, sum: 8
n(18) - prod: 8, sum: 9
n(19) - prod: 9, sum: 10
n(20) - prod: 0, sum: 2
n(21) - prod: 2, sum: 3
n(22) - prod: 4, sum: 4 -> ( 4 == 4)
n(23) - prod: 6, sum: 5
n(24) - prod: 8, sum: 6
n(25) - prod: 10, sum: 7
n(26) - prod: 12, sum: 8
n(27) - prod: 14, sum: 9
n(28) - prod: 16, sum: 10
n(29) - prod: 18, sum: 11
n(30) - prod: 0, sum: 3
如果我误解了您的代码的目标,请发表评论并帮助澄清您要实现的目标。在考虑了你在做什么之后,提示了这个编辑。
示例使用/输出 if ((n == $((my_prod + my_sum))))
如果您实际上正在寻找等于n
等于产品加上总和分解数字的等式,那么调整输出格式,只有匹配是:
$ bash prodsum.sh
...
n(19) - prod: 9, sum: 10 (19 = 9 + 10)
...
n(29) - prod: 18, sum: 11 (29 = 18 + 11)